Ich versuche, deklarative Transaktion zu machen.
Dies ist meine Datei spring.xml:
%Vor%Und das ist meine Controller-Implementierung:
%Vor%Beide sind im Paket Test genannt.
Das ist mein Versuch:
%Vor%Aber das wirft eine Ausnahme:
org.hibernate.HibernateException: createQuery ist ohne aktive Transaktion nicht gültig
Warum transactionManager nicht funktioniert? Ich hoffe mit @Transactional Annotation alle Transaktionen werden von Spring Framework verwaltet werden. Was kann ich tun?
Danke allen.
Entfernen Sie die folgenden Zeilen, sie werden nicht benötigt, wenn Transaktionen von Spring verwaltet werden:
%Vor% Tatsächlich wird durch die Einstellung von hibernate.current_session_context_class
die Spring-Transaktionsverwaltung deaktiviert, siehe AbstractSessionFactoryBean.setExposeTransactionAwareSessionFactory()
javadoc :
Schalten Sie diese Markierung aus, um die Ebene freizulegen Hibernate SessionFactory mit Ruhezustand ist Standard getCurrentSession () Verhalten, unterstützende einfache JTA-Synchronisation nur. Alternativ einfach überschreiben die entsprechende Hibernate-Eigenschaft "hibernate.current_session_context_class".
Ich erinnere mich, dass Sie mit stereotyp-annotierten Klassen wie @Controller
ein seltsames Verhalten bekommen können, wenn die Klasse eine solche Schnittstelle implementiert.
Ich bin nicht 100% sicher, was die Problemumgehung dafür ist, aber versuchen Sie eine oder beide der folgenden:
@Transactional
von TestControllerImp.findAll()
nach TestController.findAll()
proxy-target-class="true"
zu deinem <tx:annotation-driven/>
hinzu
Einer oder beide oder die sollten den Trick machen, aber keiner ist ideal. Ich habe das schon früher in anderen Fragen gesehen und bin nie ganz auf den Grund gekommen, was es verursacht.
Tags und Links hibernate spring annotations transactions