Sql grails中的变量声明与belongsTo关系相同吗?

Sql grails中的变量声明与belongsTo关系相同吗?,sql,gorm,grails,Sql,Gorm,Grails,我正在尝试设置一些域类。我将用英语解释它,我想知道如何在grails中设置该域。大写的单词是我的领域 雇员受过教育。雇员有许多雇主(过去和现在)。一个雇员为每个雇主都有一个或多个项目。项目有角色、客户等 现在我的问题是,举例来说,我什么时候定义雇主,我会把 hasMany = [projects:Project] 也在项目中投入使用 belongsTo = [employer:Employer, employee:Employee, client:Client] 请注意,许多员工可能在同

我正在尝试设置一些域类。我将用英语解释它,我想知道如何在grails中设置该域。大写的单词是我的领域

雇员受过教育。雇员有许多雇主(过去和现在)。一个雇员为每个雇主都有一个或多个项目。项目有角色、客户等

现在我的问题是,举例来说,我什么时候定义雇主,我会把

 hasMany = [projects:Project]
也在项目中投入使用

 belongsTo = [employer:Employer, employee:Employee, client:Client]
请注意,许多员工可能在同一个项目上工作过,所以我可能想找出一种方法来定义它

我是否也会向雇主提出:

  ArrayList<Project> project = new ArrayList();
  static hasMany = [projects:Project]
ArrayList项目=新建ArrayList();
静态hasMany=[项目:项目]
或者这是多余的?

变量声明与定义
关系不同
belongsTo
主要与持久性操作的级联一起发挥作用,尤其是删除。例如,如果您有两个类:

// Employee.groovy
Project project

// Project.groovy
static belongsTo = Employee
如果某个特定项目属于某个员工,并且该员工已被删除,则该项目也将被删除。这里有一个很好的答案

对于第二个问题,是的,定义
列表
是多余的。如果您这样做:

static hasMany = [projects: Project]

集合是为域隐式定义的。但是,在某些情况下,您可能需要初始化集合以在
约束中使用。有关更多详细信息,请参阅。

这是多余的,但您的示例并不完全符合您所描述的内容。默认情况下,定义hasMany时,Grails将创建一个集合。代码将使用ArrayList而不是Set,但关系完全相同。我想你的意思是你的项目列表实际上是复数的(项目s

另外,请注意,您应该始终使用接口来定义类型化变量,而不是实现:

List<Project> projects = new ArrayList<Project>()
List projects=new ArrayList()

只要使用了映射符号,就不必定义它。您可以简单地使用hasMany=[foos:Foo],然后将该声明用于约束。从1.3开始这是新的吗?我知道我至少在1.2.0中做不到这一点,也许是这样。我已经有一段时间没有关注代码的1.2.x分支了。现在我已经删除了关于这一点的声明。我正在1.3中运行一些测试,看看是否仍然存在问题。我刚刚在Grails1.3.4中测试了这个问题,并且有相同的行为。如果我没有明确定义集合,当我尝试对集合执行约束验证时(根据我在回答中的示例),会出现与集合相关的
null
-错误。为了澄清这一点,关系将完全相同,但因为我将项目(是的,你是对的,它是“项目”)定义为ArrayList,然后我就可以在对象上使用那些特殊的ArrayList方法了,对吗?