Grails:查询关联会导致groovy.lang.MissingMethodException

时间:2010-10-04 15:39:07

标签: hibernate grails gorm

我遇到了Grails的问题,我有一个测试应用程序:

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
}

以下查询(以及更高级的嵌套关联查询)在Grails控制台中有效,但在运行带有'run-app'的应用程序时失败并出现groovy.lang.MissingMethodException:

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

堆栈跟踪:

groovy.lang.MissingMethodException: No signature of method: java.lang.String.call() is applicable for argument types: (tunehub.LyricsService$_getLyrics_closure1_closure2) values: [tunehub.LyricsService$_getLyrics_closure1_closure2@604106]
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...)

任何指针?

2 个答案:

答案 0 :(得分:0)

这个约束究竟是什么意思?似乎对我怀疑......

static constraints = {
    name()
}

你想要什么?

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

答案 1 :(得分:0)

我经常遇到与Grails类似的问题。代码是完全应有的,但重要的GORM方法是神秘的缺席。目前,我有一个业余爱好项目,其中DomainClass.list()不起作用。 findAll()也应该工作,但它也不起作用。这是一个完全的谜。 .methods()确实包含了Groovy或Grails应该添加的许多其他方法,但是大多数GORM特定的东西似乎都缺失了。虽然在BootStrap中,我可以创建该类型的对象并将它们保存到数据库中。

当我在Mac上创建Grails项目时,我似乎没有遇到此问题,但它确实发生在Windows上的家中。怪啊? Windows上的Grails 1.3.6是否可能出现问题或损坏?