@ ManyToMany / @ OneToMany由双向关联的属性进行映射

我正在为我的实习工作一个JPA Compliancy工具包……该工具包的一部分涉及测试角落案例的正确实施。

@ManyToMany有一个mappedBy属性。 JPA声明:

String mappedBy – 拥有该关系的字段或属性。 除非关系是单向的,否则是必需的。

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

给定双向@ManyToMany – 这个例子来自JPA 2.0 JSR-317规范本身!

顾客

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

电话号码

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

尚未在Customer@ManyToMany中定义mappedBy属性! 是否存在我不知道的双向映射的默认值,或者是什么?

我查看了类似的情况并发现: @OneToOne – mappedBy是可选的,没有默认的@OneToMany – 与@ManyToMany (mappedBy对于双向是可选的,没有默认值)

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

这远不是一个极端的案例。 每个双向关联都有一个所有者方和一个反方。

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

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

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

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

这在JPA规范中得到了很好的解释。 如果您需要为此规范构建合规工具包,则最好阅读并理解它。

我没有真正看到编写这样一个合规套件的重点,因为正如JPA2 JSR主页上所写,

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