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
InformationsquelleAutor Pishist | 2013-01-24