2010-09-06 33 views
0

中使用域方法,我有一个方法可以处理我的数据。Grails:在我的域模型的命名查询

例如

 
class Person { 

    String lastname 
    String firstname 

    String bigname() { 
     return lastname.toUpperCase() 
    } 

    static namedQueries = { 
     withBigname { name -> 
      eq(this.bigname(), name) 
     } 
    } 
} 

我想在命名查询使用这种方法就像一个属性,但只

this.bigname()
抛出一个
java.lang.IncompatibleClassChangeError
-Exception。

有谁知道如何在标准和命名查询中使用域方法?


更新:我现在尝试这样做:

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

您试图查询瞬态场,去除串bigname或删除瞬态和getBigname方法允许查询。阅读文档,看起来你没有清楚的瞬时使用的想法。 – 2016-12-30 18:14:21

回答

0

尝试命名方法JavaBean getter和setter符号。 重命名方法bigname()getBigname()

+0

这给了我一个“不能解决财产:bigname”...... – Jan 2010-09-08 06:51:06

0

在静态闭包中,您没有this。您需要将bigname存储在数据库中,执行某种不区分大小写的标准。

-1

看起来就像你正在试图做到这一点:

class Person { 

    String lastname 
    String firstname 

    static namedQueries = { 
     withName { name -> 
      eq('lastname', name, [ignoreCase: true]) 
     } 
    } 
} 
+0

对不起,这只是一个例子。真正的任务要复杂得多。 – Jan 2010-09-08 06:34:35