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>
<class name="model.Sessao">
<id name="id">
<generator class="uuid"/>
</id>
<property name="ativo"/>
<property name="inicio"/>
<property name="duracao" />
<property name="estacao" />
<property name="dinGasto" />
<many-to-one name="user" class="model.User" />
<many-to-one name="servico" class="model.Servico" />
</class>
</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<HorarioPromocional> getHorarioPromocionais() {
return horarioPromocionais;
}
public void setHorarioPromocionais(List horarioPromocionais) {
this.horarioPromocionais = horarioPromocionais;
}
}