JPA将同一实体持久化两次

JPA将同一实体持久化两次,jpa,persistence,duplicates,Jpa,Persistence,Duplicates,我只是注意到我处理的代码的一部分保存了同一个实体两次。 我尝试了一些技巧,比如flush()和Transaction需要_NEW,但什么都做不到。 但我可以在调试时看到,在调用persist(entity)之后,我得到了该实体的ID(标识)。。。但是稍后在代码中,如果我查看变量,我会看到相同的实体具有不同的ID,表中有两个具有这些ID的itenties 这是将JavaEE6与Glassfish 3.0.1一起使用,您使用的JPA提供商是什么?什么版本 启用日志记录(在finest上)并包括发生的

我只是注意到我处理的代码的一部分保存了同一个实体两次。 我尝试了一些技巧,比如flush()和Transaction需要_NEW,但什么都做不到。 但我可以在调试时看到,在调用persist(entity)之后,我得到了该实体的ID(标识)。。。但是稍后在代码中,如果我查看变量,我会看到相同的实体具有不同的ID,表中有两个具有这些ID的itenties


这是将JavaEE6与Glassfish 3.0.1一起使用,您使用的JPA提供商是什么?什么版本

启用日志记录(在finest上)并包括发生的事件的日志

如果使用EclipseLink启用日志记录,请参阅

指定给对象id的值,请检查以确保该值大于0。 还要确保数据库中的表是使用标识列生成的。 你在使用什么数据库

尝试使用表排序,看看它是否与标识排序有关


还包括类的源代码。

请添加实体的一些代码以及用于持久化实体的代码。它实际上使用的是Netbeans生成的代码。在本例中,我有一个Servlet调用会话bean的方法,只需执行getEntityManager().persist(entity);因此,当我调试时,在Servlet调用会话bean后的几行代码中,我可以看到实体的ID发生了变化,并且在DB中也发生了变化。我猜在实体中会感兴趣的部分:@Id@GeneratedValue(strategy=GenerationType.IDENTITY)@Basic(optional=false)@Column(name=“MEMBER_Id”)private Integer memberId;无法以当前的详细程度回答。请提供一些代码,显示您在哪一点“看到”不同的ID。在调用sesionbean之后,我可以在Servlet中的任何其他位置看到它。同一个实体在数据库中放置了两次,因此毫无疑问JPA在DB中放置了两次,尽管调试显示我只调用了一次Persiste。