Java 没有活动事务,createCriteria无效

Java 没有活动事务,createCriteria无效,java,spring,hibernate,Java,Spring,Hibernate,我使用的是spring4.1.3.RELEASE和hibernate4.3.7 当我尝试使用JTA事务和Hibernate条件查询时,出现了以下问题。代码: @Resource private UserTransaction userTransaction; @Resource private SessionFactory sessionFactory; public User getUserById(Integer id){ try { userTransactio

我使用的是
spring4.1.3.RELEASE
hibernate4.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管理事务?请看链接:

您可能在userTransaction.begin()上遇到异常。您的catch不起任何作用,因此createCriteria()会因为您没有事务而失败。

请确保您已经设置了hibernate以正确地与JTA集成。@M.Deinum您是指
线程
?目前它被设置为线程。这是否可行?一旦您基于spring,为什么不想使用spring管理事务?看看链接:这是错误的是,这是本地交易,而不是JTA。但是正如@Hazhir所提到的,如果您使用Spring来管理和配置事务,那么可以为您节省很多麻烦。