在Grails Domain Class上缺少静态get方法

时间:2011-02-18 17:00:39

标签: grails gorm dynamic-method

我们在使用grails生产中间歇性地出现以下错误。它说给定的域类没有get方法。对于执行约300次/分钟的代码,这每隔几天就会发生一次。我们无法重现它。

No signature of method: static DomainClass.get() is applicable for argument types: (java.lang.Long) values: [97]

还有其他人遇到过这个问题吗?我们使用的是grails 1.3.6。我们的域类中的id是gorm默认值。我们正在运行sun jvm版本1.6.0_17-b04。

更新

今天发生错误时我发现了一点。我们正在使用JMS grails插件,并且错误发生在接收JMS消息的类之一中。看起来JMS插件在grails完成引导应用程序之前就开始传递消息。如果grails启动时队列中有消息,则异常开始出现在日志中。一旦grails一直启动,错误就会停止,消息会正常处理。我的猜测是,在将动态方法添加到Domain类之前,grails中的spring上下文已经开始。

2 个答案:

答案 0 :(得分:0)

您可能遇到此问题

http://jira.codehaus.org/browse/GRAILS-4467

有点奇怪的是,这种情况经常发生。你确定经常调用失败的实际方法吗?

答案 1 :(得分:0)

正如你所说,你的域类的id是GORM默认值,所以hvgotcodes指出的Grails Jira中的错误不适用于你的情况(它们处理字符串id)。

我猜它可能在某个地方,转换为get()方法的参数不是“Long类型”。很容易错过,例如,GET / POST方法(GORM默认)传输的参数'id'是字符串类型,需要在使用之前转换为Long。

例如:

def id = params.id
def object = DomainClass.get(id as Long)