首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JPA将新的子项添加到父项的子项会导致键重复

JPA将新的子项添加到父项的子项会导致键重复
EN

Stack Overflow用户
提问于 2020-04-29 07:47:23
回答 1查看 36关注 0票数 0

我想我并不是真的理解双向的一对多关系。

我有一个父类,一个子A类和一个子B类,父类<->子-A <->子-B之间具有双向关系。我想要将子项B添加到子项A的子项B列表中,但是每次尝试合并父项时,我都会得到一个Dubliced键异常。那么我如何添加一个新的子项-B呢?

代码语言:javascript
复制
class Parent {
    long id;

    @One-To-Many, MappedBy Parent, Cascade All, OrphanRemoval true
    list <child-A> childsA;

    ...

    setter + getter
}

代码语言:javascript
复制
class Child-A {
    long id;

    @Many-To-One, JoinColums parentId, Cascade PERSIT MERGE REFRESH
    Parent parent;

    @One-To-Many, MappedBy Child-A, Cascade All, OrphanRemoval true
    list <child-B> childsB;

    ...
    setter + getter
}

代码语言:javascript
复制
class Child-B {
    long id;

    @Many-To-One, JoinColums Child-A-id, Cascade PERSIT MERGE REFRESH
    Child-A child-A;

    ...
    setter + getter
}

如何将新的子代B添加到子代A中,并合并父代以保存数据库中的所有内容?到目前为止,我已经尝试过:

代码语言:javascript
复制
Parent p = entityManager.getParent();
Child-A ca = p.getChildsA.get(indexOfCa); // the index is known
Child-B cb = new Child-B ();

... // fill cb with information

ca.add(cb); // automatically fires cb.setChild-A(ca);
p.getChildsA.set(index, ca);
entityManager.merge(p);

但这会导致DublicatedKeyException。那么,将子B对象添加到父对象中已持久化的子A对象的最佳实践是什么?

我还必须说,只有merge是可能的(没有保存、saveOrUpdate或持久化),并且不可能编辑实体类。实体是由工厂之类的东西生成的,在构建项目时,每个更改都将被覆盖。并且pom-file是不可编辑的。这也是一个Java EE web应用程序,有很多不同的框架,比如primefaces和omnifaces。

EN

回答 1

Stack Overflow用户

发布于 2020-04-29 20:49:58

我自己解决的。mysql数据库上自动生成的主键的限制为low。因此jpa耗尽了主键并尝试覆盖现有键。增加了hibernate_sequence编号,异常就消失了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61491862

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档