2015-01-07 66 views
0

我正在使用Spring 4.1.3.RELEASEHibernate 4.3.7如果沒有活動交易,createCriteria無效

當我試圖使用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-事務。什麼問題?

+0

請確保您已設置休眠以正確集成JTA。 –

+0

@ M.Deinum你的意思是'線程'?目前它被設置爲線程。那是蠕蟲嗎? –

+1

一旦你是基於spring的,爲什麼你不想用spring來管理你的交易?看看鏈接: http://spring.io/blog/2011/08/15/configuring-spring-and-jta-without-full-java-ee/ – Hazhir

回答

1

你可能會在userTransaction.begin()上得到一個異常。你的catch沒有做任何事情,所以createCriteria()失敗,因爲你沒有一個事務。