使用grails 3.3.4运行应用程序出错

时间:2018-04-13 10:13:54

标签: hibernate grails grails-3.3

我正在尝试将我的应用程序从grails 3.2.11升级到3.3.4 在做grails run-app时,我正在低于errros:

  

引起:org.springframework.beans.BeanInstantiationException:   无法实例化[org.grails.orm.hibernate.HibernateDatastore]:   构造函数抛出异常;嵌套异常是   显示java.lang.NullPointerException           在org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:154)           在org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:122)           在org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:271)           ...省略了49个常见帧引起的:java.lang.NullPointerException:null           在org.grails.orm.hibernate.cfg.GrailsDomainBinder.getTableName(GrailsDomainBinder.java:1202)           在org.grails.orm.hibernate.cfg.GrailsDomainBinder.calculateTableForMany(GrailsDomainBinder.java:1155)           在org.grails.orm.hibernate.cfg.GrailsDomainBinder.bindCollectionTable(GrailsDomainBinder.java:1105)           在org.grails.orm.hibernate.cfg.GrailsDomainBinder.bindCollection(GrailsDomainBinder.java:1052)           在org.grails.orm.hibernate.cfg.GrailsDomainBinder $ CollectionType $ 1.create(GrailsDomainBinder.java:3463)           在org.grails.orm.hibernate.cfg.GrailsDomainBinder.createClassProperties(GrailsDomainBinder.java:1872)           在org.grails.orm.hibernate.cfg.GrailsDomainBinder.bindRootPersistentClassCommonValues(GrailsDomainBinder.java:1751)           在org.grails.orm.hibernate.cfg.GrailsDomainBinder.bindRoot(GrailsDomainBinder.java:1391)           在org.grails.orm.hibernate.cfg.GrailsDomainBinder.contribute(GrailsDomainBinder.java:165)           在org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:275)           在org.hibernate.boot.model.process.spi.MetadataBuildingProcess.build(MetadataBuildingProcess.java:83)           在org.hibernate.boot.internal.MetadataBuilderImpl.build(MetadataBuilderImpl.java:418)           在org.hibernate.boot.internal.MetadataBuilderImpl.build(MetadataBuilderImpl.java:87)           在org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:692)           在org.grails.orm.hibernate.cfg.HibernateMappingContextConfiguration.buildSessionFactory(HibernateMappingContextConfiguration.java:276)           在org.grails.orm.hibernate.connections.HibernateConnectionSourceFactory.create(HibernateConnectionSourceFactory.java:86)           在org.grails.orm.hibernate.connections.AbstractHibernateConnectionSourceFactory.create(AbstractHibernateConnectionSourceFactory.java:39)           在org.grails.orm.hibernate.connections.AbstractHibernateConnectionSourceFactory.create(AbstractHibernateConnectionSourceFactory.java:23)           at org.grails.datastore.mapping.core.connections.AbstractConnectionSourceFactory.create(AbstractConnectionSourceFactory.java:64)           at org.grails.datastore.mapping.core.connections.AbstractConnectionSourceFactory.create(AbstractConnectionSourceFactory.java:52)           在org.grails.datastore.mapping.core.connections.ConnectionSourcesInitializer.create(ConnectionSourcesInitializer.groovy:24)           在org.grails.orm.hibernate.HibernateDatastore。(HibernateDatastore.java:204)           at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)           at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)           at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)           at java.lang.reflect.Constructor.newInstance(Constructor.java:423)           at org.springsource.loaded.ri.ReflectiveInterceptor.jlrConstructorNewInstance(ReflectiveInterceptor.java:1076)           在org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:142)           ...省略了51个常见帧

有人对此有任何想法吗?

2 个答案:

答案 0 :(得分:2)

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

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

class AbcType extends Abc {

static mapWith = "none"

  static mapping = {
    discriminator value: 1
  }

}

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

如果我评论"静态地图"此域类的属性。然后,Everything无缝地工作,没有任何错误。

我已经查看了3.3.4文档,"静态mapWith"财产仍受支持。

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

答案 1 :(得分:2)

我调查了这个问题,遗憾的是这是对mapWith静态属性的不当使用。问题不在于mapWith属性,而是在非持久化类上有hasMany,因为不支持。

虽然这可能以前有效(已验证您所描述的行为通过3.2.13与Gorm 6.0.x一起工作)但它不是一个功能,但这在Grails 3.3.x中不适用于Gorm 6.1.x作为关系,例如hasMany不适用于非持久化课程。

删除mapWith似乎允许它像以前的版本一样工作,并且似乎不会导致问题(您的milage可能会有所不同)。您也可以删除关系,这也会让您超越错误。但是,关系是针对持久化对象设计的,因此最好考虑进行一些域更新。