我有一个Java Sping Boot 应用程序(Spring Boot 3.1.0),我正在尝试更新Hibernate。升级的原因是,与旧版本,我遇到了应用程序制动错误,并希望看看是否较新的版本修复。从6.2.0开始的任何版本似乎都会在启动时崩溃应用程序,并出现以下错误:
org.springframework.beans.factory.BeanCreationException: Error
creating bean with name 'entityManagerFactory' defined in class path
resource
[org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]:
[PersistenceUnit: default] Unable to build Hibernate SessionFactory;
nested exception is java.lang.NullPointerException: Cannot invoke
"org.hibernate.metamodel.mapping.EmbeddableValuedModelPart.getNavigableRole()"
because "mappingModelPart" is null at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1770)
at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:598)
at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:520)
at
org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326)
at
org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
at
org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324)
at
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200)
at
org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1156)
at
org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:931)
at
org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:608)
at
org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146)
at
org.springframework.boot.SpringApplication.refresh(SpringApplication.java:733)
at
org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:435)
at
org.springframework.boot.SpringApplication.run(SpringApplication.java:311)
at
org.springframework.boot.SpringApplication.run(SpringApplication.java:1305)
at
org.springframework.boot.SpringApplication.run(SpringApplication.java:1294)
at com.frim.backend.application.Application.main(Application.java:23)
Caused by: jakarta.persistence.PersistenceException: [PersistenceUnit:
default] Unable to build Hibernate SessionFactory; nested exception is
java.lang.NullPointerException: Cannot invoke
"org.hibernate.metamodel.mapping.EmbeddableValuedModelPart.getNavigableRole()"
because "mappingModelPart" is null at
org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:421)
at
org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396)
at
org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352)
at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1816)
at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1766)
... 16 common frames omitted Caused by:
java.lang.NullPointerException: Cannot invoke
"org.hibernate.metamodel.mapping.EmbeddableValuedModelPart.getNavigableRole()"
because "mappingModelPart" is null at
org.hibernate.metamodel.model.domain.internal.MappingMetamodelImpl.lambda$registerEmbeddableMappingType$1(MappingMetamodelImpl.java:229)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) at
org.hibernate.boot.internal.MetadataImpl.visitRegisteredComponents(MetadataImpl.java:573)
at
org.hibernate.metamodel.model.domain.internal.MappingMetamodelImpl.registerEmbeddableMappingType(MappingMetamodelImpl.java:225)
at
org.hibernate.metamodel.model.domain.internal.MappingMetamodelImpl.finishInitialization(MappingMetamodelImpl.java:210)
at
org.hibernate.internal.SessionFactoryImpl.initializeMappingModel(SessionFactoryImpl.java:320)
at
org.hibernate.internal.SessionFactoryImpl.<init(SessionFactoryImpl.java:270)
at
org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:431)
at
org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1455)
at
org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66)
at
org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376)
at
org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409)
... 20 common frames omitted
Process finished with exit code 1
在此更新之前,没有任何问题。这些版本中是否有新的东西可能导致这种情况,可能是新的属性或额外的要求?
1条答案
按热度按时间oxf4rvwz1#
几天前,我们在将一个应用程序从Sping Boot 2.7.0 with Spring Data JPA(Hibernate Core 5.6.9-Final)迁移到Spring Boot 3.1.0(Hibernate Core 6.2.2-Final)时偶然发现了同样的错误,如下图所示:
在我们的例子中,错误似乎隐藏在一个
DiscountEntity
类声明的@Id
字段比其私钥DiscountEntityPK
类声明的字段更多。因此,正如您在DiscountEntityPK.java
中看到的,尽管复合私钥由2列组成:实际的实体类
DiscountEntity.java
还有两个用@Id
注解注解的字段(在代码中搜索INCORRECT ANNOTATION
)为了找到答案,我们必须显式地调试并在
MappingMetamodelImpl
类中添加断点。将"discount_level"
和"priority"
列中的@Id
注解替换为@Basic
注解后,问题得到修复。我希望这对你有帮助!