2010-08-22 136 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排序有关。

还包括你的类的源代码。