有没有办法让hibernate将ID为的实体识别为新实体!=无效的

有没有办法让hibernate将ID为的实体识别为新实体!=无效的,hibernate,jpa,Hibernate,Jpa,我将首先解释我的目标: 我必须更新一个非常复杂的实体,修改后的实体来自外部源,因此它是非托管实体,任何merge()都将失败 我的想法是简单地执行删除,然后插入: @Transactional public class MyClass{ .... public void updateEntity(Entity newEntity){ //altered entity, newly created Entity oldEntity = dao.findById(newEntity.ge

我将首先解释我的目标: 我必须更新一个非常复杂的实体,修改后的实体来自外部源,因此它是非托管实体,任何merge()都将失败

我的想法是简单地执行删除,然后插入:

@Transactional
public class MyClass{
 ....
public void updateEntity(Entity newEntity){ //altered entity, newly created
     Entity oldEntity = dao.findById(newEntity.getId()); //retrieves managed entity object
     dao.delete(oldEntity); //deletes it
     dao.insert(newEntity); //calls EntityManager.persist()
无论如何,insert()会引发以下问题:

Detached entity passed to persist
为了解决这个问题,我必须将ID置零,以便hibernate将其识别为一个新实体,无论如何,我希望保留旧ID以跟踪更新

ID当前是自动生成的,因此hibernate似乎可以识别任何ID为的实体=null作为基础表中已经存在的条目,因此将引发该异常。
有没有办法防止这种情况发生?

首先,这显然不是您收到的真正错误消息。您可能会得到“传递给持久化的分离实体”。这并不是因为删除被延迟。这是因为您正在将分离的实体(即已生成ID或版本的实体)传递到persist()。是的,对不起,我编辑了。因此,hibernate将识别任何具有ID的实体!=如果这个ID是自动生成的,那么是的。嗯..并且没有办法告诉hibernate不要这样做吗?通过执行此事务,我100%确信该ID不会出现在DB中(实际上,它属于同一个实体)。编辑后顺便说一句,谢谢你的帮助,唯一的办法是使ID不自动生成。