如何在JPA中实现复杂的实体关系

时间:2019-07-11 14:30:25

标签: java jpa spring-data

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

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

要重申,

Company与CompanyContact(这是一个链接Company,Contact和参数的实体)具有OneToMany关系,而与User之间具有OneToMany关系

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

随着我们对业务需求的细化,这种结构一直在稳步增长,并且将来随着其他实体的出现,它们将变得更加复杂。

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

创建用户时,在设置持久性之前,我设置了正确的公司和联系人,并且该用户也被正确持久化。但是,数据库中的Company和Contact实体仍然忽略了它们与新创建的User的关系。

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

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

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

但这仍然不会更新公司和联系人。

1 个答案:

答案 0 :(得分:0)

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

尝试添加 targetEntity

  

(可选)作为关联目标的实体类。   仅当使用Java定义collection属性时才是可选的   泛型。否则必须指定。

映射

  

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

也许这些会有所帮助:

oracle docs

jpa-hibernate-synchronize-bidirectional-