Grails 2.0 CreateCriteria私有(private)属性无法查询

标签 grails grails-orm grails-domain-class grails-2.0

我正在尝试将我的应用程序升级到 Grails 2.0,但我遇到了以下问题。我有一个带有公共(public) getter 的私有(private)域属性。我想在 createCriteria 中查询这个属性,它会返回我:“Could not resolve property ...”异常,即使 getter 是公开的。我看到了一个 Jira 错误 http://jira.grails.org/browse/GRAILS-8498?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
但它仍然无法正常工作。 Grails 1.3.7 运行良好。

我的代码是这样的:
领域类

class MyClass {
   protected boolean reserved = false

   protected void setReserved(boolean reserved) {
        this.reserved = reserved
    }

   public boolean getReserved() {
        return this.reserved
    }
}

询问
def c = MyClass.createCriteria()
def results = c.list {
   eq('reserved', true)
}

可能的问题是'reserved'属性名称成为grails中的保留关键字,因为它似乎对于不同名称的其他属性有效......

最佳答案

这里的问题是,为了使域类属性能够自动持久化而无需配置它们,字段必须是属性,即它们必须具有相同类型的公共(public) getter/setter 对。

当您添加公共(public)字段时,Groovy 会为您执行此操作 - 它使字段私有(private)并创建公共(public) getter 和 setter。但是,如果您已经有一个 getter 或 setter,它就不会这样做,并且如果它们不是公共(public)的,那么它们不被视为属性(在 JavaBean 意义上),因此该字段不是持久的。因此,不仅仅是该字段不可查询 - 它甚至没有在数据库中存储或更新。

关于Grails 2.0 CreateCriteria私有(private)属性无法查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8880395/

相关文章:

grails - session 固定-访问 session 中的值时出错

mongodb - GORM 查询多个集合

tomcat - Tomcat 中的 Grails 请求参数编码问题

grails - GORM 抽象域类

Grails 域 : allow null but no blank for a string

grails - 通过Grails测试通过Controller中的Domain类访问db中的数据

grails - XML 请求中与多个域类的数据绑定(bind)

grails - 如何在 ListView 中显示域中的所有列/字段

spring - 如何在Hibernate HQL中按字母顺序排序结果?

java - 从我的应用程序中访问 JVM 的内存使用情况?