【问题标题】:Override getter and setter in grails domain class for relation为关系覆盖 grails 域类中的 getter 和 setter
【发布时间】:2013-06-14 17:07:39
【问题描述】:

如何在 grails 域类中重写 getter 和 setter 以使字段成为一对多关系?我知道如何覆盖作为单个对象的字段的 getter 和 setter,但我对 Collections 有疑问。这是我的情况:

我有实体域类,它有很多标题。现在我想覆盖标题的 getter 以仅获取标志 isActive 等于 true 的标题。我已经尝试过类似的方法,但它不起作用:

class Entity {

    static hasMany = [
        titles: Title
    ]

    public Set<Title> getTitles() {
        if(titles == null)
            return null
        return titles.findAll { r -> r.isActive == true }
    }

    public void setTitles(Set<Title> s) {
        titles = s
    }
}

class Title {
    Boolean isActive

    static belongsTo = [entity:Entity]

    static mapping = {
        isActive column: 'is_active'
        isActive type: 'yes_no'
    }
}

感谢您的帮助。

【问题讨论】:

  • 你得到什么错误?
  • 对这个要求背后的推理感兴趣,为什么不使用单独的方法呢?现在,如果您需要添加检索所有标题的功能,那么您将不得不编写默认支持的单独方法。
  • 请注意:grails.1312388.n4.nabble.com/…。简而言之,确保你的 setter 和 getter 不会改变值,否则 Hibernate 会被混淆。

标签: grails grails-orm


【解决方案1】:

需要参考Set&lt;Title&gt; titles

class Entity {
    Set<Title> titles

    static hasMany = [
        titles: Title
    ]

    public Set<Title> getTitles() {
        if(titles == null)
            return null;
        return titles.findAll { r -> r.isActive == true }
    }

    public void setTitles(Set<Title> s) {
        titles = s
    }
}

【讨论】:

  • Setter 也应该改为: public void setTitles(Set s) {titles = s;然后一切正常。
  • @kpater87 正确,谢谢。我只是从您那里复制了这个问题,以显示您实际需要做什么。同时更新问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-08
  • 1970-01-01
  • 2011-03-11
  • 2014-08-05
  • 2013-11-11
相关资源
最近更新 更多