Hibernate: illégalement tenté d'associer un proxy avec deux Sessions ouvertes
J'ai 2 méthodes:
public static Ticket issueTicket(User user,Service service,String[] seats) {
Session ticSess= DB.factory.openSession();
ticSess.beginTransaction();
Date d= new Date();
Ticket ticket=new Ticket(d, service, user);
ticSess.save(ticket);
ticSess.getTransaction().commit();
int seatCount=seats.length;
for (int i=0;i<seatCount;i++){
int seatID=Integer.parseInt(seats[i]);
Seat seat=getSeatByID(seatID);
seat.setTicket(ticket);
ticSess.update(seat);
}
return ticket;
}
et,
public static Seat getSeatByID(int seatID) {
Session proSess = DB.factory.openSession();
proSess.beginTransaction();
Seat c = (Seat) (proSess.load(Seat.class, seatID));
proSess.getTransaction().commit();
return c;
}
quand je l'appelle issueTicket méthode, j'obtiens:
illegally attempted to associate a proxy with two open Sessions
et Si je ferme la session en getSeatByID méthode il y aura une autre erreur disant que la session est fermée. Voici la Trace de la Pile:
at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:164)
at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:285)
at org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:185)
at ir.ac.shirazu.cse.Terminal.Seat_$$_javassist_9.setTicket(Seat_$$_javassist_9.java)
at ir.ac.shirazu.cse.Database.DB.issueTicket(DB.java:231)
- Après l'ajout de la stacktrace il semble qu'il y a de l'initialisation tardive lieu après la sortie de l'
getSeatByID()
. Il suffit de tout faire en une seule session et il fonctionne parfaitement
Vous devez vous connecter pour publier un commentaire.
Essayez de fermer
proSess
dansgetSeatByID()
avant de retourner. Actuellement, leSeat
, en effet, reste attaché à la session s'est ouverte dansgetSeatByID()
.J'ai eu le même problème . Mais après l'utilisation de pattern singleton pour la séance, je me suis fait. Je suis de l'utilisation d'Hibernate 4.2.x.
C'est ma classe session est utilisée pour obtenir des séances pour les transactions DB etc.
}
Hibernate Classe d'aide je suis en utilisant.
}
J'ai rencontré ce problème lorsque vous essayez d'associer une entité à partir d'un Envers de la Session.
Fixe que par "rafraîchissant", a déclaré entité (la récupérer sur ma non-Envers session via PK fetch) avant de bouillonnement à mon algorithme.
utilisation
session.opensession().get(.....)
.. au lieu desession.opensession().load(.....)
que si vous faites un proSess.expulser(c) avant de s'engager proSess?