createCriteria 在没有活动事务的情况下无效

createCriteria is not valid without active transaction

我正在使用 Spring 4.1.3.RELEASEHibernate 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 - 事务。怎么了?

一旦您成为 spring 基础,您为什么不想使用 spring 来管理您的交易?看看 link: Configuring Spring and JTA without full Java EE

您可能在 userTransaction.begin() 上遇到异常。您的 catch 没有执行任何操作,因此 createCriteria() 失败,因为您没有交易。