2010-10-04 2 views
3

J'ai un problème avec Grails où j'ai une application de test avec:Grails: Interrogation Associations Causes groovy.lang.MissingMethodException

class Artist { 
static constraints = { 
name() 
} 

static hasMany = [albums:Album] 
String name 
} 

class Album { 
static constraints = { 
    name() 
} 

static hasMany = [ tracks : Track ] 
static belongsTo = [artist: Artist] 

String name 
} 

class Track { 

static constraints = { 
    name() 
    lyrics(nullable: true) 
} 

Lyrics lyrics 
static belongsTo = [album: Album] 

String name 
} 

La requête suivante (et un plus avancé, la requête d'association imbriquée) travaux dans la console Grails mais échoue avec une groovy.lang.MissingMethodException lors de l'exécution de l'application avec 'app exécuter':

def albumCriteria = tunehub.Album.createCriteria() 
def albumResults = albumCriteria.list { 
like("name", receivedAlbum) 
artist { like("name", receivedArtist) } // Fails here 
maxResults(1) 
} 

Stacktrace:

groovy.lang.MissingMethodException: No signature of method: java.lang.String.call() is applicable for argument types: (tunehub.LyricsService$_getLyrics_closure1_closure2) values: [[email protected]] 
Possible solutions: wait(), any(), wait(long), each(groovy.lang.Closure), any(groovy.lang.Closure), trim() 
at tunehub.LyricsService$_getLyrics_closure1.doCall(LyricsService.groovy:61) 
at tunehub.LyricsService$_getLyrics_closure1.doCall(LyricsService.groovy) 
(...truncated...) 

Des pointeurs? Qu'est-ce que cette contrainte signifie exactement?

+0

Pouvez-vous fournir la trace de la pile 'MissingMethodException'? –

+0

groovy.lang.MissingMethodException: Aucune signature de méthode: java.lang.String.call() est applicable pour les types d'arguments: (tunehub.LyricsService $ _getLyrics_closure1_closure2) valeurs: [[email protected]] Solutions possibles: wait (), any(), wait (long), each (groovy.lang.Closure), any (groovy.lang.Closure), trim() \t à tunehub.LyricsService $ _getLyrics_closure1.doCall (LyricsService.groovy: 61) \t at tunehub.LyricsService $ _getLyrics_closure1.doCall (LyricsService.groovy) (... tronqué ...) – Paul

+0

Je ne vois rien d'incorrect, peut-être que je le rate. Êtes-vous sûr que c'est là que l'erreur se produit? –

Répondre

0

Semble soupçonner à moi ...

static constraints = { 
    name() 
} 

est ce que vous voulez?

static constraints = { 
    name(nullable:false, blank: false) 
} 
+0

Chaque propriété a une contrainte par défaut. Lorsque vous en spécifiez un dans le bloc de contraintes sans paramètres, il prend les valeurs par défaut mais l'échafaudage l'utilise pour l'ordre des champs dans la vue. Cela n'a rien à voir avec le problème d'OP. – Gregg

0

Je rencontre souvent des problèmes similaires avec Grails. Le code est complètement comme il se doit, mais les méthodes GORM vitales sont mystérieusement absentes. En ce moment, j'ai un projet de passe-temps où DomainClass.list() ne fonctionne pas. findAll() devrait également fonctionner, mais cela ne fonctionne pas non plus. C'est un mystère complet. .methods() inclut beaucoup d'autres méthodes que Groovy ou Grails sont censées ajouter, mais la plupart des trucs spécifiques à GORM semblent manquer. Bien que dans le BootStrap, je peux créer des objets de ce type et les enregistrer dans la base de données.

Je ne semble pas avoir ce problème quand je crée un projet Grails au travail sur mon Mac, mais cela arrive chez moi sous Windows. Bizarre hein? Est-il possible Grails 1.3.6 sur Windows est buggé ou cassé?