2010-09-06 6 views
0

Dans mon modèle de domaine, j'ai une méthode qui fait quelque chose avec mes données.Grails: utiliser la méthode de domaine dans la requête nommée

par exemple.

 
class Person { 

    String lastname 
    String firstname 

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

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

Je veux utiliser cette méthode comme une propriété dans la requête nommée, mais

this.bigname()
lancers francs seulement
java.lang.IncompatibleClassChangeError
-Exception.

Est-ce que quelqu'un sait comment utiliser les méthodes de domaine dans les critères et les requêtes nommées?


Mise à jour: Je maintenant essayé ceci:

class Person { 

    String lastname 
    String firstname 
    String bigname 

    static transients = [ 'bigname' ] 

    def getBigname() { 
     return lastname.toUpperCase() 
    } 

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

Mais il en résulte que dans un "ne pouvait pas résoudre la propriété: bigname" -exception ...

+0

Vous essayez d'interroger un champ transitoire, retirez le bigname String ou supprimer la méthode transitoire et getBigname pour permettre l'interrogation. Lisez les docs, il semble que vous n'avez pas une idée claire de l'utilisation transitoire. –

Répondre

0

Essayez de nommer la méthode JavaBean notation getter et setter. Renommez la méthode bigname() en getBigname().

+0

Cela me donne un "ne pouvait pas résoudre la propriété: bigname" ... – Jan

0

Sur une fermeture statique, vous n'avez pas this. Vous devez soit stocker le bigname dans la base de données, soit utiliser des critères insensibles à la casse.

-1

semble que vous essayez d'accomplir ceci:

class Person { 

    String lastname 
    String firstname 

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

désolé, ce n'était qu'un exemple. la vraie tâche est beaucoup plus complexe. – Jan

1

Vous ne pouvez pas utiliser des méthodes de classe dans les requêtes, car les requêtes sont effectivement traduites en SQL.

Vous pourriez être en mesure d'obtenir ce dont vous avez besoin en utilisant l'écriture de la complexité dans SQL une "Restriction SQL". Rechercher « Restriction SQL » sur http://grails.org/doc/2.0.x/guide/GORM.html

HTH

Questions connexes