【发布时间】:2016-03-14 18:48:36
【问题描述】:
我在尝试使用 jpa2.0 将包含持久实体和分离实体(新创建的实体)的实体列表更新到我的数据库中时遇到错误。 我的实体包含在合并数据时出现错误(在标题中提到)的内部实体:
Class superclass{
private A a;
private string name;
//getter setters here...
}
Class A{
private long id;
@onetoone(cascade=CascadeType.All, fetch=FetchType.Eager)
private B b;
@onetoone(cascade=CascadeType.All, fetch=FetchType.Eager)
private C c;
//getter setters here...
}
Class Dao{
daoInsert(superclass x){
em.merge(x);
}
}
我希望将任何发送的实体合并到数据库中。
Hibernate 确实为此提供了解决方案,方法是将以下内容添加到 persistence.xml
有什么我可以在 jpa 中和 hibernate 一样做的事情吗?
请不要建议使用 em.find() 查找实体然后手动更新,因为我也需要持久实体和新创建的实体这两个实体。 此外,我正在使用弹簧形式将整个专利实体保存到数据库中。
对不起,如果我不够清楚,这是我的第一个问题,我真的是一个初学者。
任何帮助将不胜感激。
【问题讨论】:
-
我们需要更多信息,因为您没有描述究竟是什么导致了这个问题。不应该让我们猜测您是否调用 daoInsert 以及调用什么,以及导致问题的实体是否是 A、B 或 C 实例。您遇到异常的具体情况是什么,为什么您的模型或列表中有同一实体的多个分离实例?
-
@Chris 导致问题的实体是 b 和 c,只有当 C 中的属性值在 A 的下一个条目中重复时,我才会收到错误...我已经提到的这个链接hibernate 正是我在 jpa 中遇到的问题...HTTPS://hibernate.atlassian.net/browse/HHH-9106
-
另外我正在调用 DaoInsert 来合并我的实体列表,即如果存在具有匹配 id 的实体,则应该更新它,如果没有找到匹配的 id,则必须在数据库中创建一个新条目.这么多信息有用吗?
-
我有什么遗漏的吗...有人可以帮我吗?
-
这仍然没有描述您如何解决 HHH-9106 中的问题。您的模型显示 A->B 和 A->C。 HHH-9106 需要 A1->B1->A1'。虽然 B 和 C 可能涉及您的问题,但您没有展示足够的模型或情况来推断您正在攻击 HHH-9106,并且您没有描述为什么您会获得同一实体的多个不同实例。您可能会更好地了解为什么您的一个实体有多个分离的实例,因为这似乎效率低下,并且不清楚哪些可能包含应该捕获的更改。