【发布时间】:2018-01-10 22:07:15
【问题描述】:
我是 JPA 的新手,正在学习。当我在 SQL 中有多对多关系 b/w 表时,例如 Author 和 Book:我使用了带有复合主键的连接表 AuthorBook。
应该如何在 JPA 中做到这一点:我是否应该只创建两个实体 Author 和 Book 并使用 mappingBy 其中一个创建关系ManyToMany(例如在 Author 中)并创建另一个自己的关系所有者:在 Books 中(使用 joinColumns)。
或者我是否也应该使用 JPA “加入”第三个实体 AuthorsBooks? 什么方法是正确的?实际上有不同的方法或唯一的方法是更好的方法吗?
除了我的具体问题,我想知道是否有人知道这个问题的好例子/教程? (我找不到好的)谢谢!
【问题讨论】:
-
我会使用
@ManyToMany-注解,指定JoinTable、JoinColumn和ReverseJoinColumn。创建一个连接实体感觉是错误的和不自然的。 -
谢谢,我找到了两个选项,但猜到了你建议的选项是正确的,所以在这里问,因为很高兴知道专家的意见。
-
请对一切持保留态度。我对 JPA 和 Hibernate 的了解也是自学的。我看到它的方式如下:通过注释指定关系是(大部分)可读和集中的。引入一个新的人工对象会带来额外的复杂性 w.r.t.可读性。可能是创建这个人造对象以某种方式提高了性能(我既没有证据也没有反对它),但只要没有问题,就不要尝试修复它。
-
首先考虑领域,然后找到持久化模型的方法。
Author在问题域中有意义吗?大概。Book?是的。AuthorsBooks?没那么多。 JPA 的整体理念是,您不应该仅仅因为想要持久化而将人工构造引入域模型。