2016-03-23 12 views
0

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

+0

Schuss im Dunkeln - Sie werden mit dem gleichen '@ Transactional'? Sie haben nicht zufällig einen anderen importiert? – BretC

+0

Zeigen Sie uns die 'hibernateTransactionManager' Bean-Definition und auch' AccountManager' irgendwelche Zufalls-Methoden? –

+0

Ich verwende die richtige @Transactional Annotation, die ich auch in AccountDao (org.springframework.transaction.annotation.Transactional) verwendet habe – Nir

Antwort

1

Ich glaube, Sie JTA @Transactional Anmerkung benötigen. Verwenden Sie javax.transaction.Transactional anstelle von Hibernate org.springframework.transaction.annotation.Transactional in Ihrer Repository-Klasse AccountManager.

See Spring Dokumentation Spring Transactional Annotation

+1

Ich würde Ihnen zustimmen, wenn meine anderen Klassen nicht proxisiert wären. Aber wieder funktioniert AccountDao gut, wenn ich @Transactional dazu hinzufüge – Nir

Verwandte Themen