2012-11-27 45 views
0

我想有以下的確認:JPA如何知道何時拋出OptimisticLockException?

public void test() { 

    SomeEntity se = em.find(SomeEntity.class, 1); 

    // Do something... 

    se.setField = "test"; 

} 

這裏JPA將在se僅執行樂觀檢查。

下一頁:

public void test() { 

    SomeEntity se = em.find(SomeEntity.class, 1); 
    SomeOtherEntity soe = em.find(SomeOtherEntity.class, 1); 
    em.lock(soe, LockModeType.OPTIMISTIC); 

    // Do something... 

    se.setField = "test"; 

} 

這裏如果se OR soe已上次讀取改變(在數據庫增加的版本)JPA將拋出OptimisticException。

這是真的嗎?

+0

是的......的確如此 – James

+0

謝謝詹姆斯! –

+0

不確定何時拋出OLE。我相信它是在'se'或'soe'被更改**和**之後拋出的,您嘗試更新它們。我的意思是'se.setField(「New Value」);''不會拋出異常,而是'se.setField(「New Value」); em.merge(SE); em.flush();'會。 –

回答

0

OptimisticLockException將被拋出,只有當事務提交到數據庫礦石你打電話em.flush() - 那麼JPA提供商將比較版本字段,並找出它是由另一transactoin改變。

相關問題