要在两个方向上映射多对多关系,必须将一个方向定义为所有者,而另一个必须使用 --mappedBy 属性来定义其映射。
以典型的Employee-Project为例,一个Employee可以参与多个Project,一个Project可以有多个Employee。要创建这种双向多对多关系,请使用 field set 命令:
创建实体:
entity jpa --class ~.domain.Project
entity jpa --class ~.domain.Employee
创建关系的所有者:
field set --class ~.domain.Employee --fieldName projects --type ~.domain.Project
然后创建关系的另一端:
field set --class ~.domain.Project --fieldName employees --type ~.domain.Employee --mappedBy projects
如果不使用 --mappedBy,则持久性提供程序将假定存在两个独立的关系,并且您最终会在连接表中插入重复的行。如果你有一个概念上的双向关系,但在数据库中有两个不同的连接表,那么你不能使用--mappedBy,因为你需要维护两个独立的表。
最后,要自定义生成的代码只需使用 JPA 强制 Luke,看看 http://en.wikibooks.org/wiki/Java_Persistence/ManyToMany