为了账号安全,请及时绑定邮箱和手机立即绑定

Spring Hibernate-无法获得当前线程的事务同步会话

/ 猿问

Spring Hibernate-无法获得当前线程的事务同步会话

翻翻过去那场雪 2019-10-17 15:30:36

我使用spring + hibernate创建了一个应用程序,但始终会收到此错误。这是我第一个使用hibernate的应用程序,我阅读了一些指南,但无法解决此问题。我在哪里做错了?


这是我的应用程序的代码


ott 05, 2014 4:03:06 PM org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh

Informazioni: Refreshing   org.springframework.context.support.ClassPathXmlApplicationContext@1eab16b: startup date  [Sun Oct 05 16:03:06 CEST 2014]; root of context hierarchy

ott 05, 2014 4:03:06 PM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions

Informazioni: Loading XML bean definitions from class path resource [springConfig.xml]

ott 05, 2014 4:03:08 PM org.hibernate.annotations.common.reflection.java.JavaReflectionManager <clinit>

INFO: HCANN000001: Hibernate Commons Annotations {4.0.5.Final}

ott 05, 2014 4:03:08 PM org.hibernate.Version logVersion

INFO: HHH000412: Hibernate Core {4.3.6.Final}

ott 05, 2014 4:03:08 PM org.hibernate.cfg.Environment <clinit>

INFO: HHH000206: hibernate.properties not found

ott 05, 2014 4:03:08 PM org.hibernate.cfg.Environment buildBytecodeProvider

INFO: HHH000021: Bytecode provider name : javassist

ott 05, 2014 4:03:09 PM org.hibernate.dialect.Dialect <init>

INFO: HHH000400: Using dialect: org.hibernate.dialect.MySQL5Dialect

ott 05, 2014 4:03:09 PM org.hibernate.engine.transaction.internal.TransactionFactoryInitiator initiateService

INFO: HHH000399: Using default transaction strategy (direct JDBC transactions)

ott 05, 2014 4:03:09 PM org.hibernate.hql.internal.ast.ASTQueryTranslatorFactory <init>

INFO: HHH000397: Using ASTQueryTranslatorFactory

Exception in thread "main" 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 coreservlets.StudentDAOImpl.create(StudentDAOImpl.java:19)

at coreservlets.MainApp.main(MainApp.java:14)


查看完整描述

3 回答

?
ABOUTYOU

您必须启用交易支持(<tx:annotation-driven>或@EnableTransactionManagement)并声明,transactionManager并且它应通过进行工作SessionFactory。


您必须添加@Transactional到您的@Repository


随着@Transactional在你的@Repository春天是能够应用的事务处理支持到你的资料库。


您的Student类没有@ javax.persistence。*注释how @Entity,我假设该类的映射配置已通过XML定义。


查看完整回答
反对 回复 2019-10-17
?
狐的传说

我遇到过同样的问题,但是在一个不属于服务层的类中。就我而言,事务管理器只是通过该getBean()方法从上下文中获得的,而该类属于视图层-我的项目利用了OpenSessionInView这种技术。


该sessionFactory.getCurrentSession()方法已引起与作者相同的异常。对我来说,解决方案非常简单。


Session session;


try {

    session = sessionFactory.getCurrentSession();

} catch (HibernateException e) {

    session = sessionFactory.openSession();

}

如果该getCurrentSession()方法失败,则openSession()应该解决问题。


查看完整回答
反对 回复 2019-10-17
?
梵蒂冈之花

在您的xyz.DAOImpl.java中


请执行以下步骤:


//步骤1:设置会话工厂


@Resource(name="sessionFactory")

private SessionFactory sessionFactory;


public void setSessionFactory(SessionFactory sf)

{

    this.sessionFactory = sf;

}

//步骤2:尝试获取当前会话,并捕获HibernateException异常。


//第3步:如果有任何HibernateException异常,则为true以获取openSession。


try 

{

    //Step-2: Implementation

    session = sessionFactory.getCurrentSession();

catch (HibernateException e) 

{

    //Step-3: Implementation

    session = sessionFactory.openSession();

}


查看完整回答
反对 回复 2019-10-17

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信