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.