Grails:如何;“访问”;跨其他域的域类实例变量?

Grails:如何;“访问”;跨其他域的域类实例变量?,grails,Grails,对不起,我想不出一个更好的题目来回答这个问题,但我尽力了。我有域类User和Post——一个User有许多Post,一个Post属于一个用户,如下所示 class User { String name static hasMany = [ posts : Post ] static constraints = { } } class Post { String content static belongsTo = [ user : User

对不起,我想不出一个更好的题目来回答这个问题,但我尽力了。我有域类
User
Post
——一个
User
有许多
Post
,一个
Post
属于一个用户,如下所示

class User {

    String name

    static hasMany = [ posts : Post ]

    static constraints = {  }
}

class Post {

    String content

    static belongsTo = [ user : User ]

    static constraints = {  }
}
我有另一个域类
Status
,如下所示

class Status {
    Boolean isActive

    static constraints = {
    }
}
每个
用户
post
都有一个
状态
,我想知道如何实现它?我可以想到的两种不同方法是:

  • 继承:让
    User
    Post
    扩展
    Status
    ,并在
    状态中使用
    静态映射={tablePerHierarchy false}
    。然后
    User
    Post
    自动继承
    Status
    的实例变量(并将它们保存在单独的表中)。但是,这种方法似乎不合适,因为
    用户
    发布
    实际上不是
    状态
  • 我可以在
    User
    Post
    中重新定义
    Status
    实例变量,然后在
    User
    Post
    中执行类似操作
  • 静态约束={ 从状态导入 //其他限制 } 问题:

    • 一种方法比另一种好吗
    • 有没有更好的方法来实现这一点
    • 是否有Grails专业人士可以推荐的最佳实践

    注意:
    Status
    域有许多实例变量(这里介绍的是一个精简版本),我需要从许多其他域(“code>User
    Post
    和许多其他域”)中“访问”它的实例变量。否则,我可以直接进入
    状态
    域,然后分别在
    User
    Post
    中定义这些实例变量。上面提到的方法2可以做到这一点,除了它通过只使用
    importfromstatus

    来避免重新键入约束之外,我同意继承不是一个干净的选项。你的第二种方法似乎是正确的,但为什么你需要“导入源”?通过在User和Post中将Status定义为实例变量,Status将负责验证自己的变量。您仍然可以从Post/User访问Status的实例变量,如下所示:

    user.status.isActive
    

    谢谢你,拉米。实际上,我的意思是在
    User
    Post
    中都包含
    Boolean isActive
    而不是
    Status
    。在这种情况下,我需要从状态导入
    来处理约束。但我想我明白你的意思。尽管如此,如果我在
    User
    Post
    中声明了
    Status Status
    ,并且执行
    def User=new User(name:“我的名字”,Status:new Status(isActive:true))
    User.save(failOnError:true,flush:true)
    ,代码仍然无法对“Status\u ID”列说出类似
    NULL的语句!所以我肯定错过了一些东西。如有任何澄清,将不胜感激!好的,我想我明白了。在保存用户之前,我必须显式地保存状态
    status.save(failOnError:true,flush:true)
    ,然后才能保存用户
    user.save(failOnError:true,flush:true)
    。非常感谢。令人惊叹的!另外,如果您是Grails新手,那么我建议您阅读一些关于关系中的级联和所有权的内容。很高兴我能帮上忙。事实上,是的,我是一个新手,一直在关注《圣杯行动》MEAP,第二版Edn,还有一些地方。不过,如果您有任何具体的参考,我很想知道。非常感谢。除了官方文档之外,Grails in Action是我最好的参考资料。订阅grailsdev邮件列表也非常有用。
    user.status.isActive