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

时间:2012-02-14 13:48:42

标签: java annotations jpa-2.0

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

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

  

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

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

给定双向@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; }

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

我查看了类似的案例并发现: Customer - mappedBy是可选的,没有默认值 @OneToOne - 与@OneToMany完全相同(mappedBy对于双向是可选的,没有默认值)

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

1 个答案:

答案 0 :(得分:2)

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

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

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

反面使用mappedBy属性来说:&#34;嘿,我只是由以下属性&#34;映射的那个的反向关联。

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

JPA spec对此进行了详细解释。如果您需要为此规范构建合规工具包,那么您最好先阅读并理解它。

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

  

根据Java规范参与协议(JSPA)的要求,   Java Persistence API,版本2.0 TCK将在no   在没有支持合格的非营利实体的情况下收取费用。这样   资格认证将通过兼容性测试进行验证   奖学金计划。也可免费提供支持   奖学金委员会的批准。有关更多信息,请参阅   致:http://java.sun.com/scholarship/