Grails:在命名查询中使用域方法

时间:2010-09-06 14:41:10

标签: grails gorm

在我的域模型中,我有一个方法可以处理我的数据。

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 ...

4 个答案:

答案 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])
      }
  }
}