2

我正在尝试将我的应用程序从 grails 3.2.11 升级到 3.3.4 在执行 grails run-app 时,我得到以下错误:

引起:org.springframework.beans.BeanInstantiationException:无法实例化[org.grails.orm.hibernate.HibernateDatastore]:构造函数抛出异常;嵌套异常是 org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:122) 的 org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:154) 的 java.lang.NullPointerException .beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:271) ... 省略了 49 个常见框架 原因:java.lang.NullPointerException: null at org.grails.orm.hibernate.cfg.GrailsDomainBinder.getTableName(GrailsDomainBinder .java:1202) 在 org.grails.orm.hibernate.cfg.GrailsDomainBinder.calculateTableForMany(GrailsDomainBinder.

有人对此有任何想法吗?

4

2 回答 2

2

我能够找到这种行为的原因,但仍然不知道使用 grails 3.3.4 的解决方案

这是由于域类的“静态 mapWith”属性,例如 AbcType。

class AbcType extends Abc {

static mapWith = "none"

  static mapping = {
    discriminator value: 1
  }

}

我不希望它保存在数据库中。因此,我使用了 mapWith 属性。

如果我评论此域类的“静态 mapWith”属性。然后,一切都可以无缝运行,没有任何错误。

我检查了 3.3.4 文档,仍然支持“静态 mapWith”属性。

有没有人对这种行为有任何想法。有什么我想念的吗?

于 2018-04-17T11:18:20.853 回答
2

我调查了这个问题,不幸的是这是对mapWith静态属性的不当使用。问题不是真正的mapWith属性,而是你有一个hasMany非持久类,因为它不受支持。

虽然这可能以前有效(验证您描述的行为在 Gorm 6.0.x 的 3.2.13 之前有效)但它不是一个功能,但在 Grails 3.3.x 和 Gorm 6.1.x 中这不起作用,因为诸如此类的关系hasMany将不起作用与非持久类。

删除mapWith似乎允许它像在以前的版本中一样工作,并且似乎不会导致问题(您的里程可能会有所不同)。您还可以删除关系,这也将使您摆脱错误。同样,关系是为持久对象设计的,因此最好考虑进行一些域更新。

于 2018-05-21T17:46:55.800 回答