Da sein Hauptziel war, eine Hibernate-Sitzung mit der aktuellen Spring-Transaktion gebunden zu bekommen, wenn SessionFactory.getCurrentSession()
nicht vorhanden war. Da es jetzt existiert (und für eine lange Zeit: Die Verwendung von HibenateTemplate wird selbst im Paket hibernate3 nicht empfohlen), gibt es keinen Grund, diese Spring-spezifische Klasse zu verwenden, anstatt SessionFactory.getCurrentSession()
zu verwenden, um eine Sitzung mit der aktuellen Spring-Transaktion zu verknüpfen.
Wenn Sie Spring verwenden, sollten Sie die deklarative Transaktionsverwaltung verwenden, mit der Sie das Öffnen, Festschreiben, Schließen und Leeren vermeiden können. Es ist alles von Spring automatisch erledigt:
@Autowired
private SessionFactory sessionFactory;
@Transactional
public void someMethod() {
// get the session for the current transaction:
Session session = sessionFactory.getCurrentSession();
// do things with the session (queries, merges, persists, etc.)
}
Im obigen Beispiel wird eine Transaktion (falls nicht bereits gestartet) vor dem Methodenaufruf gestartet werden; Eine Sitzung wird von Spring für die Transaktion erstellt, und die Sitzung wird vor dem Festschreiben der Transaktion automatisch geleert. Dies geschieht bei der Rückkehr der Methode automatisch durch Spring.
Siehe http://stackoverflow.com/questions/4067775/spring-hibernate-template-when-to-use-and-why/4067801#4067801 und http://stackoverflow.com/questions/ 5104765/hibernatedaosupport-is-not-recommended-why/5104965 # 5104965 – StormeHawke