首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >消除“没有绑定到线程的Hibernate会话”和使用@Transactional方法的性能

消除“没有绑定到线程的Hibernate会话”和使用@Transactional方法的性能
EN

Stack Overflow用户
提问于 2015-02-11 10:30:12
回答 1查看 131关注 0票数 1

我在我的项目中引入了HibernateTransactionManager,因为我们需要在某些服务方法中使用事务。我还遵循了将SessionFactory注入DAO层而不是实现HibernateDaoSupport的最佳实践。

现在,在一些没有使用@Transactional注释的读取方法中,我得到了错误:

代码语言:javascript
运行
复制
No Hibernate Session bound to thread, and configuration does not allow creation of non-transactional one here

我知道如何解决这个问题,只需在整个地方添加@Transactional就行了。但我的同事们担心的是表现。还应阅读以下方法:

代码语言:javascript
运行
复制
        return sessionFactory.getCurrentSession().createCriteria(MyClass.class).add(Restrictions.eq("color", color)).addOrder(Order.asc("createDate")).list();

用@Transactional来注解?

我还读过这篇文章对Spring @事务性注释方法的几点澄清,它不鼓励在DAO层中使用这个注释,所以我看不出消除问题的最佳实践是什么,并且在读取方法上有很好的性能。

非常感谢你的帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-11 11:01:17

当您使用弹簧TransactionManager抽象时,必须始终用以下内容标记所有服务方法:

  • @Transactional
  • 只读方法的@Transaction(readOnly = true)

这是因为Hibernate不再管理事务,而是将这一责任委托给Spring框架。除非用@Transactional注释标记每个事务边界方法,否则Spring不能将当前线程与Hibernate会话和相关的JDBC连接关联起来。

因此,使用@Transactional不是一种选择。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28452009

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档