我正在尝试设置一些域类。我将用英语解释它,我想知道如何在grails中设置域名。大写单词是我的域名
员工有教育。员工有很多雇主(过去和现在)。员工为每个雇主都有一个或多个项目。项目有角色,客户等......
现在我的问题是,例如,当我定义雇主时,我会把
hasMany = [projects:Project]
和项目中的ALSO
belongsTo = [employer:Employer, employee:Employee, client:Client]
请注意 - 许多员工可能在同一个项目上工作过,所以我可能想找出一种方法来定义它?
我是否也会投入雇主:
ArrayList<Project> project = new ArrayList();
static hasMany = [projects:Project]
或者这是多余的?
答案 0 :(得分:1)
变量声明不与定义belongsTo
关系相同。 belongsTo
主要通过级联持久性操作发挥作用,特别是删除。例如,如果您有两个类:
// Employee.groovy
Project project
// Project.groovy
static belongsTo = Employee
如果特定项目属于Employee,并且该Employee已删除,则项目也将删除。这是another SO question,答案很好。
对于第二个问题,是的,定义List
是多余的。如果你这样做:
static hasMany = [projects: Project]
为域隐式定义了Collection。但是,在某些情况下,您可能需要初始化集合以便在constraints
中使用。有关详细信息,请参阅this issue。
答案 1 :(得分:1)
这是多余的,但你的例子并不完全准确。默认情况下,当您定义hasMany时,Grails将创建一个Set。您的代码将使用ArrayList而不是Set,但关系完全相同。我假设您的项目ArrayList实际上是复数(项目 s )。
另外,只是旁注,您应该始终使用接口来声明您键入的变量而不是实现:
List<Project> projects = new ArrayList<Project>()