Migracao para Hibernate Annotations

Ola,

Atualmente tenho uma aplicacao utilizando o hibernate 3.2 que recentemente estou migrando o mapeamento para Annotations, no geral tudo funciono bem nessa migracao, o unico problema eh que estou recebendo exception abaixo nos meus testes unitários

Detalhe eh que ao simplesmente deixar trocar o hibernate.cfg.xml do mapeamento da classe para hbm o problema some

Segue execpition:

org.hibernate.HibernateException: Illegal attempt to associate a collection with two open sessions
	at org.hibernate.collection.AbstractPersistentCollection.setCurrentSession(AbstractPersistentCollection.java:410)
	at org.hibernate.event.def.OnUpdateVisitor.processCollection(OnUpdateVisitor.java:40)
	at org.hibernate.event.def.AbstractVisitor.processValue(AbstractVisitor.java:101)
	at org.hibernate.event.def.AbstractVisitor.processValue(AbstractVisitor.java:61)
	at org.hibernate.event.def.AbstractVisitor.processEntityPropertyValues(AbstractVisitor.java:55)
	at org.hibernate.event.def.AbstractVisitor.process(AbstractVisitor.java:123)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performUpdate(DefaultSaveOrUpdateEventListener.java:268)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsDetached(DefaultSaveOrUpdateEventListener.java:217)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:93)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70)
	at org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:507)
	at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:499)
	at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:495)
	at util.HibernateUtility.save(HibernateUtility.java:52)
	at util.SessionManeger.endSession(SessionManeger.java:52)
	at util.SessionManeger.banUsr(SessionManeger.java:162)
	at util.SessionManeger.iniciarSessao(SessionManeger.java:71)
	at SessionManegerTest.recuperarSessaoPelaEstacaoTest(SessionManegerTest.java:177)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:585)
	at org.testng.internal.MethodHelper.invokeMethod(MethodHelper.java:552)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:411)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:785)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:114)
	at org.testng.TestRunner.privateRun(TestRunner.java:693)
	at org.testng.TestRunner.run(TestRunner.java:574)
	at org.testng.SuiteRunner.privateRun(SuiteRunner.java:241)
	at org.testng.SuiteRunner.run(SuiteRunner.java:145)
	at org.testng.TestNG.createAndRunSuiteRunners(TestNG.java:901)
	at org.testng.TestNG.runSuitesLocally(TestNG.java:863)
	at org.testng.TestNG.run(TestNG.java:613)
	at org.testng.eclipse.runner.RemoteTestNG.run(RemoteTestNG.java:85)
	at org.testng.eclipse.runner.RemoteTestNG.main(RemoteTestNG.java:127)

Meu hbm:

[code]
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd”>

<hibernate-mapping>

&lt;class name="model.Sessao"&gt;

    &lt;id name="id"&gt;
        &lt;generator class="uuid"/&gt;
    &lt;/id&gt;
    
    &lt;property name="ativo"/&gt;
    
    &lt;property name="inicio"/&gt;

    &lt;property name="duracao" /&gt;
    
    &lt;property name="estacao" /&gt;
    
    &lt;property name="dinGasto" /&gt;
    
    &lt;many-to-one name="user" class="model.User" /&gt;  
    
    &lt;many-to-one name="servico" class="model.Servico" /&gt;
    
&lt;/class&gt;

</hibernate-mapping>[/code]

Minha classe:

/*
 * Sessao.java
 *
 * Created on 16 de Maio de 2006, 23:44
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package model;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;

import org.hibernate.annotations.GenericGenerator;

import util.CaniveteSuico;

@Entity
public class Sessao {
    
    private String id;
    private User user;
    private Date inicio;
    private Long duracao;
    private String estacao;
    private double dinGasto;
    private List horarioPromocionais = new ArrayList();
    private Boolean ativo;
    private Servico servico;
    
    
    /** Creates a new instance of Sessao */
    
    public Sessao(User _nome) {
        user = _nome;
    }
    
    public Sessao() {
        inicio = new Date();
        duracao = 0L;
    }
    
    @ManyToOne
    public User getUser() {
        return user;
    }
    
    public void setUser(User user) {
        this.user = user;
    }
    
    public Date getInicio() {
        return inicio;
    }
    
    public void setInicio(Date inicio) {
        this.inicio = inicio;
    }
    /**
     * 
     * @return Long
     */
    public Long getDuracao() {
        return duracao;
    }
    
    public void setDuracao(Long duracao) {
        this.duracao = duracao;
    }
    
    @Id @GeneratedValue(generator="system-uuid")
    @GenericGenerator(name="system-uuid", strategy = "uuid")
    public String getId() {
        return id;
    }
    
    public void setId(String id) {
        this.id = id;
    }

    public String getEstacao() {
        return estacao;
    }

    public void setEstacao(String aestacao) {
        this.estacao = aestacao;
    }

    public Double getDinGasto() {
        return dinGasto;
    }


    @ManyToOne
    public Servico getServico() {
        return servico;
    }

    public void setServico(Servico servico) {
        this.servico = servico;
    }

	public Boolean getAtivo() {
		return ativo;
	}

	public void setAtivo(Boolean ativo) {
		this.ativo = ativo;
	}
	
	@OneToMany(cascade=CascadeType.ALL)
	public List&lt;HorarioPromocional&gt; getHorarioPromocionais() {
		return horarioPromocionais;
	}

	public void setHorarioPromocionais(List horarioPromocionais) {
		this.horarioPromocionais = horarioPromocionais;
	}
    
    
}

Bom, o porque da diferença entre usar annotations e os hbms estar causando este problema é estranho, mas ele está sendo causado provavelmente porque cada teste unitário seu está rodando em uma sessão separada do Hibernate. Tente verificar se o arquivo de configuração que você usava para os hbm’s não tem algo diferente do que está usando pras annotations.