我正在为我的实习工作一个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
)?
答案 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/。