gpt4 book ai didi

java - 解决 JPA/Hibernate EntityNotFoundException

转载 作者:行者123 更新时间:2023-12-02 07:02:09 26 4
gpt4 key购买 nike

我在这里遇到了一个非常奇怪的情况。当我尝试删除一组实体并立即尝试添加另一组实体(可能会或可能不会再次具有相同的元素)时,我似乎收到以下异常。不需要整个堆栈跟踪,因为它没有说明太多内容。

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对象,存在于 oldEntitiesnewEntities 列表中。

我已经尝试了很多方法来完成这项工作,但没有任何方法可以帮助我解决这个问题。添加FetchType.EAGER & CascaseType.ALL, CascaseType.PERSIST也没用。 jpa EntityManager似乎没有commit()方法之一,我可以在 delete() 之后使用它& 在 store() 之前方法。我尝试过交换 store()persist() (尽管商店内部也调用 persist() )!

注意:- 要求是删除旧列表并插入新列表,因为比较元素并仅添加新元素很乏味(列表有时可能非常大)。

最佳答案

我认为异常(exception)情况非常明显:您告诉 session 删除实体 X,同时存储实体 X。现在这个可怜的东西很困惑,不知道该怎么办。

在保留新/旧/删除的实体之前,可能通过commit执行Session.flush()

编辑:

如果这不起作用,您需要在新 session 中进行插入。问题可能仍然是,您没有临时实体,但实际上已删除实体。因此,您可能必须将所有数据复制到新实例中。

关于java - 解决 JPA/Hibernate EntityNotFoundException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16515481/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com