首页 > 解决方案 > JPA中如何实现复杂的实体关系

问题描述

我有一个看起来像这样的实体家族:

Company (1    ->    n)  CompanyContact  (n   <-    1) Contact
     \                                                  /  
      \                                                /
       \  (1    ->    n)    User    ( 1     -      1) / 

重申一下,

Company 与 CompanyContact 具有 OneToMany 关系(它只是链接 Company、Contact 和参数的实体)以及与 User 的 OneToMany 关系

Contact 与 CompanyContact 具有 OneToMany 关系,与 User 具有 OneToOne 关系

随着我们业务需求的细化,这种结构一直在稳步增长,并且将来会因更多实体而变得更加复杂。

然后可以通过以下示例演示该问题:

当我创建一个用户时,我在持久化之前设置了正确的公司和联系人,并且用户被正确地持久化。但是,数据库中的 Company 和 Contact 实体仍然没有注意到它们与新创建的 User 的关系。

如果我想保持所有实体的更新,我真的需要每次都更新整个 Company-CompanyContact-Contact-User 链吗?有一个更好的方法吗?

我尝试在用户端的关系映射中应用不同的级联策略,例如

@OneToOne(cascade = CascadeType.ALL) 私人联系人联系人;

但这仍然没有更新公司和联系人方面。

标签: javajpaspring-data

解决方案


我认为你的课程设计得不好。

尝试添加targetEntity

(可选)作为关联目标的实体类。仅当使用 Java 泛型定义集合属性时才可选。必须另外指定。

映射

拥有关系的字段。除非关系是单向的,否则是必需的。

也许那些会有所帮助:

甲骨文文档

jpa-休眠-同步-双向-


推荐阅读