GvNIX中的多对多关系

时间:2015-05-04 10:42:41

标签: gvnix gvnix-es

在我的E-R模型中,我有两个与多对多关系相关的课程(用户和常规),但我不知道如何将其翻译成GvNIX代码。 我应该在每个类中使用set属性来指定多对多的基数吗? 例如:

field set --fieldName routines --class ~.objects.User --type ~.objects.Routine --cardinality MANY_TO_MANY 
field set --fieldName users --class ~.objects.Routine --type ~.objects.User --cardinality MANY_TO_MANY

1 个答案:

答案 0 :(得分:2)

要在两个方向上映射多对多关系,必须将一个方向定义为所有者,另一个方向必须使用--mappedBy属性来定义其映射。

以典型的Employee-Project为例,一个Employee可以参与很多项目,一个Project可以有很多Employees。要创建这种双向多对多关系,请使用字段集命令:

创建实体:

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 force Luke,看看http://en.wikibooks.org/wiki/Java_Persistence/ManyToMany