2011-03-11 58 views
0

我正在嘗試openjpa和jpa。我只有一個實體類作爲數據庫中的對應表。實體的其中一個屬性是用戶名,db表中的相應行具有varchar2(20)。在我的主要方法是什麼,我試圖實體與用戶名長度超過20 堅持和實例所有我做的是openjpa拋出optimisticklockexception

em.getTransaction().begin(); 
em.persist(entity); //entity here is the instance with the username longer than 20 
em.getTransaction().commit(); 

我想這一點,希望能得到一些其他類型的異常,但我不我爲什麼會遇到樂觀抑制的想法?

我沒有任何鎖定設置。我的意思是我使用默認值來鎖定屬性。

有人知道這裏發生了什麼嗎?

+0

你怎麼樣發佈entir

private Long version; @Version @Column(name="VERSION") public Long getVersion() { return version; } public void setVersion(Long version) { this.version = version; } 

希望這有助於... e堆棧跟蹤和你的實體?什麼版本的OpenJPA?你如何增強你的實體? – Rick 2011-03-13 18:02:50

回答

0

不知道爲什麼會這樣......我已經注意到,OptimisticLockException在怪異的情況下,拋出...

添加一個版本字段到表和實體往往能OpenJPA的帶有鎖定更好地工作.. 。

在實體bean添加這個(也添加一個名爲版本到你表中的列):

+0

不,它沒有工作。我試過了,如果我使用正確的數據,它可以很好地工作。假設,如果堅持一個新的實例它運作良好,版本設置爲1.接下來,如果檢索行並進行一些更改,再次運行良好,版本會自動遞增到2. – BeeRung 2011-03-12 05:36:54

+0

對不起,點擊輸入錯誤。而且,當試圖持續並使用無效數據實例(例如字段值爲String的字符串超過20)時,它又會拋出相同的OptimisticLockException。我在想,一個更合適的例外會對我有幫助。 – BeeRung 2011-03-12 05:40:42