2010-03-22 54 views
1

当我写了下面的类,我得到以下编译错误:Grails的 - 自引用关系

could not resolve property

我怎样才能achive如下:

class Employee{ 
    String Name 
    String Email 
    Employee Manager 
    static hasMany = [desginations:Designation]  

    static constraints = { 
    Name(unique:true) 
    Email(unique:true) 
    } 

感谢, 大加赞赏。

+0

只是为了使其更清楚我不知道如何分配一个员工经理谁inturn也是一个员工。 – WaZ 2010-03-22 14:57:15

回答

5

格罗姆可能会挑剔遵循其命名约定。特别是,字段名称应该是camelCase,以小写字母开头。

,定义如下:

class Employee { 
    String name 
    String email 
    Employee manager 

    static constraints = { 
     name(unique:true) 
     email(unique:true) 
     manager(nullable:true) 
    } 
} 

我可以像这样一个经理创建一个雇员:

manager = new Employee(name: 'manager', email: '[email protected]') 
manager.save() 
employee = new Employee(name: 'employee', email: '[email protected]') 
employee.manager = manager 
employee.save() 

编辑: 作为fabien7474指出,重要的部分是经理(可为空:真)约束。这样可以保存员工记录而无需分配经理。在上例中,名为manager的员工是employee的经理,但manager本身没有经理。这由数据库的管理器列中的NULL值表示。

+0

谢谢你的回复, 但是,如果我必须编辑一个我分配为经理的员工,在这种情况下,Grails不会让我为经理分配一个空值。这导致管理员必须被分配经理的问题。 我希望你明白我的意思 这只发生在我编辑管理器时。 – WaZ 2010-03-22 17:11:18

+3

如果您指定约束管理器(空值:true),则不应发生 – fabien7474 2010-03-22 18:45:34

+0

忘记提及, 我的员工域中确实有经理(空值:true)。 当我编辑管理器时,我在管理器的列表框中看不到空的选项。我被迫为我正在编辑的人分配一位经理。 – WaZ 2010-03-23 09:55:42