我在这里遇到了一个非常奇怪的情况。当我尝试删除一组实体并稍后立即尝试添加另一组实体时,这些实体可能会或可能不会再次具有相同的元素,我似乎遇到了以下异常。不需要整个堆栈跟踪,因为它并没有说太多。
javax.persistence.EntityNotFoundException: deleted entity passed to persist [com.test.MyEntity#<null>]
为了让自己更清楚,让我做一个更详细的解释。
这是我的实体。
@Entity
@Table(name = "MY_ENTITY")
@SequenceGenerator(name = "my_enty_seq", sequenceName = "MY_ENTITY_SEQ")
public class MyEntity {
private long id;
@Id
@GeneratedValue(strategy = GenerationType.AUTO, generator = "my_enty_seq")
@Column(name = "ID", unique = true, nullable = false, precision = 12, scale = 0)
public long getId() {
return this.id;
}
// Other methods & variables which are not relevant here.
}
这是与实体一起玩的班级。
public class MyEntityServiceImpl implements MyEntityService {
public void updateMyEntities(List<MyEntity> newEntities) {
// Delete the Old Items
List<MyEntity> oldEntities = myDAO.getAllEntities();
myDAO.delete(oldEntities); // myDAO extends GenericDaoJpaWithoutJpaTemplate, hence, the DELETE is available in it.
// Add the New Items
myDAO.store(newEntities); // This is where I get the mentioned Exception.
}
// Other non-relevant stuffs
}
我在该方法上遇到上述异常的情况store()
是存在一些公共MyEntity
对象,同时存在于oldEntities和newEntities列表中。
我已经尝试了很多方法来完成这项工作,但没有什么能帮助我克服这个问题。添加FetchType.EAGER
&CascaseType.ALL, CascaseType.PERSIST
也没有用。jpaEntityManager
似乎也没有commit()
方法,我可以在方法delete()
之前的 & 之后使用它store()
。我也尝试过store()
与persist()
(尽管商店内部调用persist()
)交换!
注意:-要求是删除旧列表并插入新列表,因为比较元素并仅添加新元素很乏味(有时列表可能非常大)。