Oracle
 sql >> Base de données >  >> RDS >> Oracle

session/entitymanager est fermé

Vous ne devez pas utiliser la Session et Transaction en tant que membre de la classe de votre dao comme ça. Session/EntityManager sont supposés être définis par unité de travail, ils ne sont pas thread-safe.

Dans votre état actuel, comme Spring DI crée des beans en tant que singleton, si deux threads utilisent le dao en même temps, le second écrasera les deux Session et Transaction membres, c'est pourquoi je suppose que vous obtenez l'exception IllegalStateExcepion.

Vous devez les rendre dans la portée du thread en les utilisant comme variables dans les méthodes ou, si vous n'avez pas besoin de la méthode spécifique d'hibernate, vous pouvez opter pour une configuration JPA complète dans Spring et utiliser @PersistenceContext/@PersistenceUnit pour laisser le framework s'occuper de ce problème.