Non devi usare la Session
e Transaction
come un membro della classe del tuo dao in quel modo. Session/EntityManager
si suppone che l'ambito sia per unità di lavoro, non sono thread-safe.
Nel tuo stato attuale, poiché Spring DI crea bean come singleton, se due thread usano il dao contemporaneamente il secondo sovrascriverà entrambi Session
e Transaction
membri, motivo per cui suppongo che tu ottenga l'IllegalStateExcepion.
Devi renderli nell'ambito del thread usandoli come variabili nei metodi oppure, se non hai bisogno del metodo specifico di ibernazione, potresti optare per una configurazione JPA completa in primavera e usare @PersistenceContext/@PersistenceUnit
lasciare che il framework si occupi di questo problema.