【问题标题】:Set in domain not working after upgrading grails升级 grails 后在域中设置不起作用
【发布时间】:2013-07-09 10:45:06
【问题描述】:

最近我将 grails 从 1.3.4 升级到 2.2.2,在尝试迭代域中定义为 hasMany 的 Set 时出现以下错误。

class A {
 String name
 static hasMany = [bList: B]
}

class B {
 static belongsTo = [a:A]
}

class TestController {
 def test = {
  A a = A.get(1L)
  def bList = a.bList
  bList.each{}
 }
}

上面一行 bList.each {} 正在引发以下异常

java.lang.IllegalArgumentException:参数数量错误

在 org.grails.datastore.mapping.engine.event.AbstractPersistenceEventListener.onApplicationEvent(AbstractPersistenceEventListener.java:46)

在 com.test.TestController$_closure2.doCall(TestController.groovy:5)

在 java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)

在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)

在 java.lang.Thread.run(Thread.java:680)

【问题讨论】:

  • 您确实有BuildConfig 中提到的hibernate 插件吗?对吗?
  • 因为它的升级休眠插件是在 application.properties "plugins.hibernate=2.2.2" 中指定的,所以其他一切正常,所有 crud 操作都在接受这个。
  • 不应在此处指定插件。它们应该在 BuildConfig.groovy 中。
  • 建议:在 2.2.2 中创建一个示例应用,并与升级后的应用进行比较。或者将内容和设置复制到 2.2.2 中新创建的应用程序中。通过这种方式,您将不会错过新版本 grails 中的任何重要内容。此外,平滑升级还有一些先决条件,我猜你应该已经环顾四周了。
  • @JamesKleeh 我知道,但这就是你升级时的情况,现在我已将它们移至 BuildConfig 没有任何改变。

标签: grails grails-2.2


【解决方案1】:

所以我发现了问题

B 类附加了一个 afterLoad() 事件挂钩,由于某种奇怪的原因抛出 java.lang.IllegalArgumentException: wrong number of arguments 异常我现在已将其更改为 onLoad() Happy Days Now。

谢谢 侯赛因

【讨论】:

    猜你喜欢
    • 2012-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-18
    • 1970-01-01
    • 2015-12-08
    • 2017-07-06
    • 1970-01-01
    相关资源
    最近更新 更多