Grails: использовать метод домена в именованном запросе - PullRequest
0 голосов
/ 06 сентября 2010

в моей доменной модели у меня есть метод, который что-то делает с моими данными.

например

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

Ответы [ 4 ]

1 голос
/ 05 сентября 2013

Вы не можете использовать методы класса в запросах, потому что запросы фактически переводятся в SQL.

Вы можете получить то, что вам нужно, написав сложность в SQL «Ограничение SQL». Искать «Ограничение SQL» на http://grails.org/doc/2.0.x/guide/GORM.html

НТН

0 голосов
/ 07 сентября 2010

На статическом замыкании у вас нет this. Вам нужно либо сохранить bigname в базе данных, выполнить какие-либо критерии без учета регистра.

0 голосов
/ 08 сентября 2010

похоже, что вы пытаетесь сделать это:

class Person {

  String lastname
  String firstname

  static namedQueries = {
      withName { name ->
          eq('lastname', name, [ignoreCase: true])
      }
  }
}
0 голосов
/ 06 сентября 2010

Попробуйте назвать метод в JavaBean в методах получения и установки. Метод переименования bigname() в getBigname().

...