java - 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) 私人联系人联系人;
但这仍然没有更新公司和联系人方面。
解决方案
我认为你的课程设计得不好。
尝试添加targetEntity
(可选)作为关联目标的实体类。仅当使用 Java 泛型定义集合属性时才可选。必须另外指定。
和映射
拥有关系的字段。除非关系是单向的,否则是必需的。
也许那些会有所帮助:
推荐阅读
- sqlite - 将 sqlite 数据库导入 gnuplot
- excel - VBA 迭代方法调用
- ios - 即使在 ios 等 android 应用程序崩溃后重新加载应用程序
- c++ - libdl 在创建 QObject 时如何链接?从代码链接?
- c++ - Pointer to unique_ptr - is this a loophole?
- python - 将 Haar 小波变换应用于时间序列数据
- amazon-dynamodb-streams - dynamoDBStreams getRecords() returning empty records when ShardIteratorType is set to LATEST
- java - How to turn radio button into string and store it into the database?
- html - Font appearance in Chrome on Windows
- forms - 在 symfony 中为子表单添加表单域