Attualmente sto lavorando a un'applicazione che utilizza Spring Boot e Spring Data (le sue interfacce JpaRepository
per la precisione) insieme a Hibernate.Spring Boot & Spring Data: come sono gestite le Hibernate Sessions?
Una cosa che adoro di Hiberante è la sua funzione di caching: quando invii più query che corrispondono a un particolare oggetto, recupererai la stessa istanza di quell'oggetto su ogni esecuzione di query (rispetto all'operatore == di Java). Tuttavia, quando si usano le Spring Data e le classi JpaRepository
, questo non sembra essere sempre il caso. Per questo motivo, presumo che ci siano più istanze HibernateSession
qui al lavoro.
La mia domanda è quindi: in che modo Spring Data gestisce Hibernate Sessions? Quando li apre o li chiude? C'è un modo per configurarlo per utilizzare la stessa sessione per l'intero runtime della mia applicazione per sfruttare appieno la cache degli oggetti di Hibernate? C'è un motivo non per farlo in quel modo?
Grazie,
Alan
Beh, in realtà non è vero ... A seconda della demarcazione della transazione, riutilizzerai la sessione già aperta. Se hai un metodo di servizio annotato con '@ Transactional' (e hai impostato correttamente il supporto tx) spring aprirà un' Session'/'EntityManager' e lo riutilizzerà per tutte le chiamate db che fai all'interno di quella transazione. Inoltre, si dovrebbe notare che il livello di servizio dovrebbe essere il livello transazionale NON il livello di accesso ai dati. –
Grazie per i chiarimenti. Questo è buono a sapersi. – Alan47