在我的域模型中,我有一个方法可以处理我的数据。
e.g。
class Person { String lastname String firstname String bigname() { return lastname.toUpperCase() } static namedQueries = { withBigname { name -> eq(this.bigname(), name) } } }
我希望像命名查询中的属性一样使用此方法,但
this.bigname()仅抛出
java.lang.IncompatibleClassChangeError- 异常。
有人知道如何在条件和命名查询中使用域方法吗?
更新:我现在尝试了这个:
class Person { String lastname String firstname String bigname static transients = [ 'bigname' ] def getBigname() { return lastname.toUpperCase() } static namedQueries = { withBigname { name -> eq('bigname', name) } } }
但它只会导致“无法解析属性:bigname”-exception ...
答案 0 :(得分:1)
您不能在查询中使用类方法,因为查询实际上已转换为SQL。
通过将SQL中的复杂性写成“SQL限制”,您可能能够获得所需的内容。在http://grails.org/doc/2.0.x/guide/GORM.html
上搜索“SQL限制”HTH
答案 1 :(得分:0)
尝试使用JavaBean getter和setter表示法命名方法。
将方法bigname()
重命名为getBigname()
。
答案 2 :(得分:0)
在静态闭包上,您没有this
。您需要将bigname
存储在数据库中,执行某些不区分大小写的标准。
答案 3 :(得分:-1)
看起来你正在努力实现这个目标:
class Person {
String lastname
String firstname
static namedQueries = {
withName { name ->
eq('lastname', name, [ignoreCase: true])
}
}
}