【问题标题】:How to override the DomainClass.list() in GORM (Grails)如何覆盖 GORM (Grails) 中的 DomainClass.list()
【发布时间】:2012-02-24 12:43:41
【问题描述】:

各位,我遇到了 grails GORM 的问题,我的应用程序完全依赖于 DomainClass.list() 方法,它在我所有的创建/编辑 GSP 中,但现在我需要一个列出对象的特定行为。更具体地说,我需要按一个属性过滤这些列表(全部)。

问题是我希望不改变这些方法调用的所有外观,那么有没有办法自定义默认 list() 方法的行为?我需要它以它的方式运行,但添加一个结束过滤器。

【问题讨论】:

  • 您找到解决方案了吗?我有完全相同的问题,我向我的用户添加了 DELETED 状态,我不想修改所有代码来调用新方法,我只是希望 list() 不返回已删除的用户
  • @Eduard 也有同样的问题。你找到解决办法了吗?

标签: grails grails-orm grails-domain-class


【解决方案1】:

也许您可以使用休眠过滤器插件(请参阅here)。这将允许您根据属性过滤所有查找器方法(包括list()):

static hibernateFilters = {
    enabledFilter(condition: 'deleted=0', default: true)
}

【讨论】:

  • 仅供参考:我测试了休眠过滤器插件,但它似乎不适用于 Grails 2.0。此外,它不适用于 get() 调用
  • 我不知道它是否适合我,我的问题有点复杂。过滤不是直接在域类属性上进行的,它是一个复杂的关系,我在插件文档中没有发现它是否真的解决了问题。但是这个插件可以解决一个更简单的问题。
【解决方案2】:

您是否考虑过使用names queries?你总是可以这样做:

class DomainClass {
    // ... class members

    static namedQueries = {
        myList { params->
            // put your complicated logic here
        }
    }
}

然后您可以将您对DomainClass.list() 的调用替换为DomainClass.myList.list()

【讨论】:

  • 实际上我的问题是我不想替换所有这些 DomainClass.list() 调用。我正在研究 grails 元编程以检查它是否可以解决我的问题....
  • 是否可以将命名查询设为默认?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-05-13
  • 2015-09-13
  • 2021-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多