2012-03-13 19 views
6

notato che se voglio leggere alcuni dati e se io non ho un contesto di transazione non sarò in grado di farlo a causaLeggi solo i dati tramite molla + Hibernate

org.hibernate.HibernateException: No Sessione trovata per thread corrente

Per la lettura dei dati, non è richiesta una transazione normalmente.

Quindi per la gestione della sessione Spring è necessario disporre di una transazione anche per operazioni di sola lettura come seleziona ...?

Non è un sovraccarico?

PS.I non vogliono aprire e chiudere la sessione manualmente ...

Grazie mille.

risposta

4

@Transactional indica a primavera di aprire e chiudere una sessione, oltre a istruire l'operazione per avviare e registrare una transazione. Questo non è molto semplice, ma è così che funziona. Quindi, se non si dispone di @Transactional, nessuna sessione viene aperta. Ecco le opzioni:

  • uso @Transactional(readOnly=true) - lo scopo è quello di avere una transazione di sola lettura. Raccomando che uno
  • usi JPA EntityManager iniettato con @PersistenceContext. Si aprirà una nuova sessione sottostante per ogni chiamata. Non è una buona opzione. Ma dovresti considerare l'utilizzo di EntityManager con una transazione readOnly = true
  • Utilizzare un aspetto/intercettore/filtro aggiuntivo per aprire e chiudere la sessione. Sarebbe difficile, e potresti finire confuso dall'implementazione primaverile dell'attuale concetto di sessione di ibernazione.
+0

Io uso Spring + Hibernate (senza JPA) .Ora per leggere alcuni dati e in modo che Spring gestisca la sessione Devo usare @@ Transactional.Ho la possibilità di aprire e chiudere manualmente la sessione , ma penso che non sia elegante?! Ma ho questa cosa in mente che usign @@ Transactional anche con sola lettura .it è lo stesso di non usare solo read e c'è qualche potenziale overhead .. – Cris

+0

readonly è efficace solo quando vuoi evitare di scrivere dati per quanto ne so ... http://www.ibm.com/developerworks/java/library/j-ts1/index.html – Cris

+1

non preoccuparti del sovraccarico, anche se ce n'è uno. – Bozho

Problemi correlati