【发布时间】:2015-03-05 10:37:45
【问题描述】:
我正在使用Spring 4.1.3.RELEASE 和Hibernate 4.3.7。
在我尝试同时使用JTA 事务和Hibernate 条件查询时出现以下问题。代码:
@Resource
private UserTransaction userTransaction;
@Resource
private SessionFactory sessionFactory;
public User getUserById(Integer id){
try {
userTransaction.begin();
} catch (Exception e) { }
Criteria criteria = sessionFactory.getCurrentSession().createCriteria(User.class);
criteria.add(Restrictions.eq("id", id));
try {
userTransaction.commit();
} catch (Exception e) { }
return (User) criteria.uniqueResult();
}
我得到了一个异常,即 createCriteria 在没有活动事务的情况下无效。通过使用调试器检查方法的代码,我确保我有一个有效的JTA - 事务。出了什么问题?
【问题讨论】:
-
确保您已设置休眠以与 JTA 正确集成。
-
@M.Deinum 你的意思是
<prop key="hibernate.current_session_context_class">thread</prop>吗?目前它被设置为线程。那是破旧的吗? -
一旦您基于 Spring,为什么不想使用 Spring 来管理您的事务?看看链接:spring.io/blog/2011/08/15/…
-
这是错误的,是针对本地事务而不是 JTA。但正如@Hazhir 所说,如果您使用 Spring 来管理和配置事务,可以为您省去很多麻烦。