GvNIX 中的多对多关系
Many to many relation in GvNIX
在我的 E-R 模型中,我有两个通过多对多关系关联的 classes(用户和例程),但我不知道如何将其转换为 GvNIX 代码。
我应该在每个 class 中使用一个 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
要在两个方向上映射多对多关系,一个方向必须定义为所有者,另一个方向必须使用 --mappedBy 属性来定义其映射。
以典型的Employee-Project为例,一个Employee可以参与多个Project,一个Project可以有多个Employee。要创建这种双向多对多关系,请使用字段设置命令:
创建实体:
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,则持久性提供程序将假定存在两个独立的关系,并且您最终会在连接中插入重复的行 table。如果你有一个概念上的双向关系,但在数据库中有两个不同的连接table,那么你一定不能使用--mappedBy,因为你需要维护两个独立的table。
最后,要自定义生成的代码,只需使用 JPA force Luke,看看 http://en.wikibooks.org/wiki/Java_Persistence/ManyToMany
在我的 E-R 模型中,我有两个通过多对多关系关联的 classes(用户和例程),但我不知道如何将其转换为 GvNIX 代码。 我应该在每个 class 中使用一个 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
要在两个方向上映射多对多关系,一个方向必须定义为所有者,另一个方向必须使用 --mappedBy 属性来定义其映射。
以典型的Employee-Project为例,一个Employee可以参与多个Project,一个Project可以有多个Employee。要创建这种双向多对多关系,请使用字段设置命令:
创建实体:
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,则持久性提供程序将假定存在两个独立的关系,并且您最终会在连接中插入重复的行 table。如果你有一个概念上的双向关系,但在数据库中有两个不同的连接table,那么你一定不能使用--mappedBy,因为你需要维护两个独立的table。
最后,要自定义生成的代码,只需使用 JPA force Luke,看看 http://en.wikibooks.org/wiki/Java_Persistence/ManyToMany