我正在为我的实习工作开发JPA兼容套件…该套件的一部分涉及测试极端情况的正确实现。
@ManyToMany具有mapedBy属性。JPA指出:
@ManyToMany
字符串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!我不知道的双向映射有默认值吗?
Customer
我查看了类似的情况,发现: @OneToOne-mappingBy是可选的,没有默认值 @OneToMany-完全相同@ManyToMany(mappedBy对于双向是可选的,没有默认值)
@OneToOne
@OneToMany
简而言之,我的问题是: 对于@ManyToMany和@OneToMany,应在关系的拥有方(Customer例如)中将其放置在mappedBy属性中?
这绝不是一个极端的情况。每个双向关联都有一个所有者方和一个反向方。
JPA使用拥有方来确定两个实体之间是否存在关联。另一侧被忽略。
拥有方定义了如何映射关联(使用JoinColumn,JoinTable等批注)。它没有任何mappedBy属性。
mappedBy
反面使用该mappedBy属性说:“嘿,我只是由以下属性映射的那个的逆关联”。
因此,根据定义,拥有方没有mappedBy属性。如果有一个,它就不会是拥有者。
JPA规范对此做了很好的解释。如果您需要为此规范构建兼容套件,则最好阅读并理解它。
我真的看不出编写这种兼容工具包的意义,因为正如在JPA2 JSR主页上所写的那样,
根据Java规范参与协议(JSPA)的要求,Java Persistence API版本2.0 TCK将免费获得许可,无需支持合格的非营利实体。此类资格将由兼容性测试奖学金计划进行验证。经奖学金委员会批准,也可以免费提供支持。有关更多信息,请访问:http //java.sun.com/scholarship/。