Ich habe 3 Klassen, AccountController, AccountManager und AccountDao (sie sind miteinander in dieser Reihenfolge injiziert, d. H. Controller < - Manager < - Dao). Wenn ich eine @Transactional Annotation auf accountDao setze, habe ich eine DB Sitzung und alles funktioniert gut. Wenn ich @Transactional auf den Manager setze, funktioniert es nicht. Ich bekomme:@Transactional Annotation Proxy nicht meine Klasse
org.hibernate.HibernateException: Could not obtain transaction-synchronized Session for current thread
Ich sehe, dass AccountManager ist nicht Wrapper mit einem Proxy aus irgendeinem Grund (beim Debuggen). Irgendwelche Ideen, warum das passiert?
In meinem Anwendungskontext XML Ich habe:
<context:component-scan base-package="com.mypackage" use-default-filters="true">
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
<tx:annotation-driven transaction-manager="hibernateTransactionManager" proxy-target-class="true"/>
Auf Accountmanager habe ich folgende Anmerkungen:
@Repository
@Transactional
public class AccountManager { ... }
Und noch seltsamer Sache ist, hat Accountmanager ein ‚Devicemanager‘ hinein injiziert , mit den gleichen Anmerkungen wie AccountManager, aber DeviceManager wird proxied! Es ist vollständig transaktional.
Ich verwende die org.springframework.transaction.annotation.Transactional Annotation.
Ich habe noch keine endgültige Methoden in Account
Schuss im Dunkeln - Sie werden mit dem gleichen '@ Transactional'? Sie haben nicht zufällig einen anderen importiert? – BretC
Zeigen Sie uns die 'hibernateTransactionManager' Bean-Definition und auch' AccountManager' irgendwelche Zufalls-Methoden? –
Ich verwende die richtige @Transactional Annotation, die ich auch in AccountDao (org.springframework.transaction.annotation.Transactional) verwendet habe – Nir