2010-08-22 131 views
0

我剛剛注意到我工作的代碼的一部分保存了兩次相同的實體。 我嘗試了幾個技巧,例如flush()和Transaction REQUIRES_NEW,但沒有任何技巧。 但在調用persist(實體)後,我可以看到調試時,我得到該實體的ID(IDENTITY)...但稍後在代碼中,如果我查看變量,我將看到相同的實體一個不同的ID和兩個包含表中這些ID的迭代。JPA堅持兩次相同的實體

這是使用Java EE 6的Glassfish 3.0.1

+1

請添加您的實體代碼和您用來保存它的代碼。 – 2010-08-22 20:54:34

+0

它實際上使用由Netbeans生成的代碼。 在這種情況下,我有一個Servlet調用會話bean的方法,只需執行一個 getEntityManager()。persist(entity); 所以,當我調試時,我的Servlet調用會話bean後,只有幾行,我可以看到實體的ID改變,並在數據庫中。 和我猜會是在實體有趣的部分: @Id @GeneratedValue(策略= GenerationType.IDENTITY) @Basic(可選=假) @Column(name = 「MEMBER_ID」) 私人整數MEMBERID; – 2010-08-22 21:16:55

+0

無法用當前級別的詳細信息回答。請提供一些代碼,顯示您在哪個點「看到」不同的ID。 – 2010-08-22 22:24:08

回答

1

什麼是您使用JPA的供應商?和什麼版本?

啓用日誌記錄(最好)幷包括髮生的日誌。

如果使用的EclipseLink啓用日誌記錄看,

http://wiki.eclipse.org/EclipseLink/Examples/JPA/Logging

什麼樣的價值分配給你的對象的ID,檢查,以確保它是> 0 還要確保數據庫中的表與生成一個IDENTITY列。 你使用什麼數據庫?

嘗試使用TABLE排序來查看它是否與IDENTITY排序有關。

還包括你的類的源代碼。