2015-04-17 33 views
0

我開發使用EJB應用程序,當我做了數據庫,會出現以下錯誤的事務:Java異常 - 無法調用commit時自動提交=真正

Grave: RAR5031:System Exception
javax.resource.spi.LocalTransactionException:
Can't call commit when autocommit=true

下面是代碼:

public boolean update(Person vo) { 
    boolean r = false; 
    try 
    { 
     entityManager.getTransaction().begin(); 
     entityManager.merge(vo);    
     entityManager.getTransaction().commit(); 
     r = true; 
    } catch (Exception e) 
    { 
    } finally { 
     return r; 
    } 
} 

如果這段代碼沒有從EJB調用不出錯誤。當我從EJB調用時,我只會遇到錯誤。

+1

如果要使用聲明性容器管理事務,則不需要明確地開始和提交事務。所有骯髒的任務都由引擎蓋下的容器處理。但是,如果您想對某些不清楚的原因使用編程事務感興趣,那麼您可以使用[bean managed transactions](https://docs.oracle.com/javaee/7/tutorial/transactions004.htm)(注入'javax.transaction.UserTransaction'接口使用'@ Resource'註釋,並以顯式/編程方式啓動和提交事務。 – Tiny

回答

1

在會話bean上添加註釋@TransactionManagement(TransactionManagementType.BEAN)。 示例:

@TransactionManagement(TransactionManagementType.BEAN) 
public class YourSessionBean ... 
1

所有EJB方法在默認情況下都是事務性的。事務處理由EJB執行,因此您不需要調用begin()和commit()。

+0

如果沒有調用這些方法不persitente作出更改。你有其他想法嗎? – user2076397

相關問題