Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

session/entitymanager está fechado


Você não deve usar a Session e Transaction como um membro de classe do seu dao assim. Session/EntityManager devem ter o escopo definido por unidade de trabalho, eles não são thread-safe.

No seu estado atual, como o Spring DI cria beans como singleton, se dois threads usarem o dao ao mesmo tempo, o segundo substituirá os dois Session e Transaction membros e é por isso que suponho que você obtenha o IllegalStateExcepion.

Você precisa torná-los no escopo do thread usando-os como variáveis ​​em métodos ou, se não precisar do método específico do hibernate, poderá optar por uma configuração JPA completa no Spring e usar @PersistenceContext/@PersistenceUnit para deixar o quadro lidar com essa questão.