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.