我正在尝试将我的应用程序从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个常见帧
有人对此有任何想法吗?
答案 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可能会有所不同)。您也可以删除关系,这也会让您超越错误。但是,关系是针对持久化对象设计的,因此最好考虑进行一些域更新。