小编典典

@ ManyToMany / @ OneToMany mappingby属性用于双向关联

java

我正在为我的实习工作开发JPA兼容套件…该套件的一部分涉及测试极端情况的正确实现。

@ManyToMany具有mapedBy属性。JPA指出:

字符串mappingBy-拥有关系的字段或属性。除非关系是单向的,否则为必需。

没有给出默认值-默认列为空。

给定双向@ManyToMany-此示例来自JPA 2.0 JSR-317规范本身!

顾客

@ManyToMany
@JoinTable(name="CUST_PHONES")
public Set<PhoneNumber> getPhones() { return phones; }

电话号码

@ManyToMany(mappedBy="phones")
public Set<Customer> getCustomers() { return customers; }

尚未在@ManyToManyof的中定义mapledBy属性Customer!我不知道的双向映射有默认值吗?

我查看了类似的情况,发现: @OneToOne-mappingBy是可选的,没有默认值
@OneToMany-完全相同@ManyToMany(mappedBy对于双向是可选的,没有默认值)

简而言之,我的问题是:
对于@ManyToMany@OneToMany,应在关系的拥有方(Customer例如)中将其放置在mappedBy属性中?


阅读 209

收藏
2020-11-23

共1个答案

小编典典

这绝不是一个极端的情况。每个双向关联都有一个所有者方和一个反向方。

JPA使用拥有方来确定两个实体之间是否存在关联。另一侧被忽略。

拥有方定义了如何映射关联(使用JoinColumn,JoinTable等批注)。它没有任何mappedBy属性。

反面使用该mappedBy属性说:“嘿,我只是由以下属性映射的那个的逆关联”。

因此,根据定义,拥有方没有mappedBy属性。如果有一个,它就不会是拥有者。

JPA规范对此做了很好的解释。如果您需要为此规范构建兼容套件,则最好阅读并理解它。

我真的看不出编写这种兼容工具包的意义,因为正如在JPA2
JSR主页上
所写的那样

根据Java规范参与协议(JSPA)的要求,Java Persistence API版本2.0
TCK将免费获得许可,无需支持合格的非营利实体。此类资格将由兼容性测试奖学金计划进行验证。经奖学金委员会批准,也可以免费提供支持。有关更多信息,请访问:http
//java.sun.com/scholarship/。
2020-11-23