我正在尝试将我的应用升级到Grails 2.0,但我遇到了以下问题。我有一个带有公共getter的私有域属性。我想在createCriteria中查询这个属性,它会返回我:“无法解析属性...”异常,即使getter是公共的。我见过一个Jira bug 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)
}
可能问题是“保留”属性名称在grails中成为保留关键字,因为对于其他名称的其他属性,它似乎有效...
答案 0 :(得分:1)
这里的问题是,为了使域类属性能够自动持久而不必配置它们,字段必须是属性,即它们必须具有相同类型的公共getter / setter对。
当您添加公共字段时,Groovy会为您执行此操作 - 它会将字段设为私有并创建公共getter和setter。但是如果你已经有一个getter或者setter,它就不会这样做,如果它们不是公共的,那么它们就不被认为是属性(在JavaBean意义上),所以该字段不是持久的。因此,该字段不可查询 - 甚至不在数据库中存储或更新。
答案 1 :(得分:0)
经过几分钟的检查,我意识到问题出在受保护的安装人员身上。如果我将setter设置为public,它就可以了。它似乎是一个Grails bug,因此我已经上升了grails bug,请参阅:http://jira.grails.org/browse/GRAILS-8637