2016-10-17 3 views
0

Ich habe Spring von 3.1 bis 4.1.3 migriert und Hibernate 3.2 bis 4.3.9Spring + Hibernate Migration - currentSession() -Methode Wurf Ausnahme

Im Rahmen der Migration I unten Import und Code geändert haben

alt Import

import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

neuen Import

import org.springframework.orm.hibernate4.support.HibernateDaoSupport; 

und Code ändert

In Hibernate 3 Ich habe folgenden Code

public Session getCurrentSession() { 
    Session session = getSession(); 
    session.setFlushMode(FlushMode.MANUAL); 
    return session; 
} 

jetzt habe ich, wie unten

public Session getCurrentSession() { 
    Session session = currentSession(); 
    session.setFlushMode(FlushMode.MANUAL); 
    return session; 
    } 

nach den oben genannten Änderungen, die ich bin immer unter Ausnahme

nach neuen Gläser modifizierte
Could not obtain transaction-synchronized Session for current thread 
org.hibernate.HibernateException: Could not obtain transaction-synchronized Session for current thread 
    at org.springframework.orm.hibernate4.SpringSessionContext.currentSession(SpringSessionContext.java:134) 
    at org.hibernate.internal.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:1014) 
    at org.springframework.orm.hibernate4.support.HibernateDaoSupport.currentSession(HibernateDaoSupport.java:129) 

Ich verwende keine Anmerkungen in Meine Anwendung

Ich kann das Problem nicht lösen. Bitte helfen Sie mir zu wissen, mögliche Gründe für die Ausnahme

+0

Fix Ihre Transaktion Setup. Diese Ausnahme sagt Ihnen, dass Sie Ihre Transaktionen nicht (richtig) eingerichtet haben. –

+0

@ M.Deinum Ich habe \t -Tag in meiner Konfigurationsdatei hinzugefügt, aber immer noch das gleiche Problem. muss ich noch etwas hinzufügen? Bitte bestätigen Sie – Raj

+0

Das Hinzufügen dieses Tags ohne Hinzufügen von '@ Transactional' ist ziemlich nutzlos. –

Antwort

1

ich Sie transactionManager für Ihre sesssionFactory hinzufügen erraten müssen:

<bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager"> 
    <property name="sessionFactory"> 
     <ref local="mySessionFactory"/> 
    </property> 
    </bean> 

wo mySessionFactory ist Ihre Session Factory-Bean Id.

Wie Sie sagten, Sie verwenden Anmerkungen in Ihrem Projekt nicht. Anschließend müssen Sie AOP verwenden, um die Transaktionsverwaltung auf Methodenebene zu aktivieren.

<tx:advice id="txAdvice" transaction-manager="transactionManager"> 
    <tx:attributes> 
    <tx:method name="select*" read-only="true" /> 
    <tx:method name="*" /> 
    </tx:attributes> 
</tx:advice> 
<aop:config> 
    <aop:pointcut id="txPointcut" expression="execution(* example.MyClass.*(..))" /> 
    <aop:advisor advice-ref="txAdvice" pointcut-ref="txPointcut" /> 
</aop:config> 

Fügen Sie Transaktion Unterstützung für Ihre Methode wie folgt hinzu.

Hinzufügen in Ihrem POM folgenden Eintrag, wenn Sie MAVEN oder gradle verwenden oder Sie können einfach downloaden und Glas zu Ihrem Classpath hinzufügen.

<!-- https://mvnrepository.com/artifact/org.springframework/spring-tx --> 
<dependency> 
    <groupId>org.springframework</groupId> 
    <artifactId>spring-tx</artifactId> 
    <version>4.3.3.RELEASE</version> 
</dependency> 
+0

es bereits in der xML-Datei dargestellt wird – Raj

+0

Stellen Sie sicher, Sie verwenden 'org.springframework.orm.hibernate4.HibernateTransactionManager' nicht' org. Springframework.orm.hibernate3.HibernateTransactionManager' – gschambial

+0

die Anwendung nicht mit AOP als auch .. Ich kann meine TX-Details, wenn Sie wollen – Raj