我有一個實體(主鍵不是由序列生成)像這樣在Spring Data JPA/EclipseLink的環境:JPA錯誤「無法合併已刪除的實體」試圖刪除並重新插入一行SpringData
@Entity
@Table(name="MY_ENTITY")
public class MyEntity implements Serializable {
@Id
@Column(insertable=true, updatable=true, nullable=false)
private String propertyid;
\\other columns
}
,我試圖從表中刪除一行,並重新插入(具有相同的主鍵)。
我的方法是調用deleteAll()來擦桌子,然後保存()的新實體:
@Transactional
public void deleteAndSave(MyEntity entity) {
propertyInfoRepository.deleteAll();
propertyInfoRepository.flush(); // <- having it or not, nothing changes
propertyInfoRepository.save(entity);
}
,但是這給了我這個錯誤:
Caused by: java.lang.IllegalArgumentException: Cannot merge an entity that has been removed: [email protected]
at org.eclipse.persistence.internal.sessions.MergeManager.registerObjectForMergeCloneIntoWorkingCopy(MergeManager.java:912)
at org.eclipse.persistence.internal.sessions.MergeManager.mergeChangesOfCloneIntoWorkingCopy(MergeManager.java:494)
at org.eclipse.persistence.internal.sessions.MergeManager.mergeChanges(MergeManager.java:271)
at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.mergeCloneWithReferences(UnitOfWorkImpl.java:3495)
at org.eclipse.persistence.internal.sessions.RepeatableWriteUnitOfWork.mergeCloneWithReferences(RepeatableWriteUnitOfWork.java:378)
at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.mergeCloneWithReferences(UnitOfWorkImpl.java:3455)
at org.eclipse.persistence.internal.jpa.EntityManagerImpl.mergeInternal(EntityManagerImpl.java:486)
at org.eclipse.persistence.internal.jpa.EntityManagerImpl.merge(EntityManagerImpl.java:463)
....
我在做什麼錯誤? 我不明白爲什麼它試圖合併實體,而不是在刪除後重新插入它。
感謝您的幫助!
我不會嘗試刪除然後合併實體。實體總是一個新的實例(可能具有相同的主鍵),並且此時我調用deleteAndSave方法,但它尚未被管理。 – lincetto