我正在为我的实习开发JPA Compliancy工具包......该工具包的一部分涉及测试正确实施角落案例。@ ManyToMany/@ OneToMany mappedby属性用于双向关联
@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; }
的属性的mappedBy尚未在Customer
的@ManyToMany
定义!有没有我不知道的双向映射的默认值,或者是什么?
我看着类似的情况,结果发现: @OneToOne
- 的mappedBy是可选的,没有默认 @OneToMany
- 完全一样@ManyToMany
(的mappedBy是可选的双向,没有默认值)
总之,我的问题: 对于@ManyToMany
和@OneToMany
,应该在关系的拥有方(例如Customer
)的mappedBy属性中放置什么?
该兼容工具包只是JPA使用的注释的单元测试的花哨名称。现在关注ORM ......你是说这些单元测试(或者其他的东西)已经存在了吗?我正在实习的公司希望我将其作为测试其开源应用程序的一部分来开发。 我有点了解'mappedBy'的用法,我只是对其确切的措辞感到困惑。为什么说mappedBy注释对于非单向关系是必需的而不排除双向关系的拥有方? – Pimgd 2012-02-14 18:19:33
TCK用于测试JPA实现。它不用于测试使用JPA构建的应用程序。所以我想你的套件可能会有用。它可能会这样说,因为开发人员很懒,并且认为注释的用户会读取JPA规范或注释本身的javadoc,其中详细解释了mappedBy属性的使用。 – 2012-02-14 18:27:29
“,其中详细解释了mappedBy属性的使用。”你能给我一个这个文档的链接吗?我可以在网上找到它的一些,但它似乎鹦鹉在JSR-317规范中可以阅读的内容......并没有揭示这种特殊情况。 – Pimgd 2012-02-14 18:37:24