Hibernate 5.0.11 - AttributeConverter类注册了多次 [英] Hibernate 5.0.11 - AttributeConverter class registered mulitple times

查看:1317
本文介绍了Hibernate 5.0.11 - AttributeConverter类注册了多次的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我将spring boot升级到1.4.2,并将hibernate升级到5.0.11.Final,并开始看到这个错误。不知道为什么HibernateJpaAutoConfiguration多次注册客户转换器,即使它只声明一次。

当我尝试运行bootRun时,会抛出以下异常。

任何帮助都是非常可观的。

  m [32m2016-11-22 12:25:26.469  - 信息 -  oaccStandardService [main]  - 停止服务Tomcat 
[m [32m2016-11-22 12:25:26.485 - INFO - utoConfigurationReportLoggingInitializer [main] -

启动ApplicationContext时出错。要显示自动配置报告,请启用'debug'重新运行您的应用程序。
[m [1; 31m2016-11-22 12:25:26.489 - 错误 - osbSpringApplication [main] - 应用程序启动失败
[m org.springframework.beans.factory.BeanCreationException:在类路径资源[org / springframework / boot / autoconfigure / orm / jpa / HibernateJpaAutoConfiguration.class]中定义名称为'entityManagerFactory'的Bean时创建错误:调用init方法失败;嵌套异常是org.hibernate.AssertionFailure:AttributeConverter类[class com.testOrg.converter.InvertedBooleanTFConverter]在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean中注册了多次
(AbstractAutowireCapableBeanFactory.java:1583)〜 [spring-beans-4.3.4.RELEASE.jar:4.3.4.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:553)〜[spring-beans- 4.3.4.RELEASE.jar:4.3.4.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)〜[spring-beans-4.3.4.RELEASE .jar:4.3.4.RELEASE]
在org.springframework.beans.factory.support.AbstractBeanFactory $ 1.getObject(AbstractBeanFactory.java:306)〜[spring-beans-4.3.4.RELEASE.jar:4.3 .4.RELEASE]
在org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSing使用org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java :302)〜[spring-beans-4.3.4.RELEASE.jar:4.3.4.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)〜[ spring-beans-4.3.4.RELEASE.jar:4.3.4.RELEASE]
在org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1081)〜[spring-context-4.3.4 .RELEASE.jar:4.3.4.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:856)〜[spring-context-4.3.4.RELEASE.jar:4.3。 4.RELEASE]
在org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542)〜[spring-context-4.3.4.RELEASE.jar:4.3.4.RELEASE]
在org.springframework.boot.context.embed ded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122)〜[spring-boot-1.4.2.RELEASE.jar:1.4.2.RELEASE]
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java :761)[spring-boot-1.4.2.RELEASE.jar:1.4.2.RELEASE]
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:371)[spring-boot-1.4。 2.RELEASE.jar:1.4.2.RELEASE]
在org.springframework.boot.SpringApplication.run(SpringApplication.java:315)[spring-boot-1.4.2.RELEASE.jar:1.4.2。 RELEASE]
在com.testOrg.Application.main(Application.java:17)[main /:?]
引起:org.hibernate.AssertionFailure:AttributeConverter class [class com.testOrg.location。 uk.service.converter.InvertedBooleanTFConverter]在org.hibernate.boot.internal.InFlightMetadataCollectorImpl.addAttributeConverter(InFlightMetadataCollectorImpl.java:353)〜[hibernate-core-5.0.11.Final.jar:5.0。中多次注册
。 11.Final]
在org.hibernate.boo t.internal.InFlightMetadataCollectorImpl.addAttributeConverter(InFlightMetadataCollectorImpl.java:386)〜[hibernate-core-5.0.11.Final.jar:5.0.11.Final]
at org.hibernate.boot.model.source.internal .annotations.AnnotationMetadataSourceProcessorImpl $ AttributeConverterManager.addAttributeConverter(AnnotationMetadataSourceProcessorImpl.java:321)〜[hibernate-core-5.0.11.Final.jar:5.0.11.Final]
at org.hibernate.boot.model.source。 internal.annotations.AnnotationMetadataSourceProcessorImpl.categorizeAnnotatedClass(AnnotationMetadataSourceProcessorImpl.java:117)〜[hibernate-core-5.0.11.Final.jar:5.0.11.Final]
at org.hibernate.boot.model.source.internal .annotations.AnnotationMetadataSourceProcessorImpl。< init>(AnnotationMetadataSourceProcessorImpl.java:104)〜[hibernate-core-5.0.11.Final.jar:5.0.11.Final]
at org.hibernate.boot.model.process .spi.MetadataBuildingProcess $ 1.< init>(MetadataBuildingProcess.java:147)〜[hibernate-core-5.0.11.Final.jar:5.0.11.Fin al]
at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:141)〜[hibernate-core-5.0.11.Final.jar:5.0.11.Final]
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:847)〜[hibernate-entitymanager-5.0.11.Final.jar:5.0.11.Final]
at org .hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:874)〜[hibernate-entitymanager-5.0.11.Final.jar:5.0.11.Final]
at org.springframework.orm。 jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:60)〜[spring-orm-4.3.4.RELEASE.jar:4.3.4.RELEASE]
at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory (LocalContainerEntityManagerFactoryBean.java:353)〜[spring-orm-4.3.4.RELEASE.jar:4.3.4.RELEASE]
at org.springframework.orm.jpa.Abstra ctEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:373)〜[spring-orm-4.3.4.RELEASE.jar:4.3.4.RELEASE]
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java :362)〜[spring-orm-4.3.4.RELEASE.jar:4.3.4.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1642)〜[ spring-beans-4.3.4.RELEASE.jar:4.3.4.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1579)〜[spring-beans-4.3 .4.RELEASE.jar:4.3.4.RELEASE]
... 14 more
与目标VM断开连接,地址:'127.0.0.1:54978',transport:'socket'
:web:bootRun FAILED


解决方案

JPA的$ c> @EnableAutoconfiguration 是pa扫描两条路径,因为数据库配置位于子文件夹中,这是合理的。

  com.testOrg 

com.testOrg.configuration

org.springframework.orm。 520线上的jpa.persistenceunit.DefaultPersistenceUnitManager 会根据找到的扫描配置路径的数量多次添加转换器,
我认为其他类我们没有检查重复但转换器我们请检查它是否被注册多次,比抛出异常请参阅。 com.testOrg.configuration.MetadataBuilderImpl.java 第907行



为了解决这个问题,我将DatabaseConfiguration类从com.testOrg.configuration文件夹为main,因此只有一个类可以注册。



我希望这可以对某人有帮助。

I upgraded spring boot to 1.4.2 and hibernate to 5.0.11.Final and started seeing this error. Not sure why HibernateJpaAutoConfiguration is registering the customer converter multiple times even though it is declared only once.

Following exception is being thrown when I try to run to bootRun.

Any help would be really appreciable.

m[32m2016-11-22 12:25:26.469 -- INFO  --                  o.a.c.c.StandardService [main] -- Stopping service Tomcat
[m[32m2016-11-22 12:25:26.485 -- INFO  -- utoConfigurationReportLoggingInitializer [main] -- 

Error starting ApplicationContext. To display the auto-configuration report re-run your application with 'debug' enabled.
[m[1;31m2016-11-22 12:25:26.489 -- ERROR --                  o.s.b.SpringApplication [main] -- Application startup failed
[m org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaAutoConfiguration.class]: Invocation of init method failed; nested exception is org.hibernate.AssertionFailure: AttributeConverter class [class com.testOrg.converter.InvertedBooleanTFConverter] registered multiple times
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1583) ~[spring-beans-4.3.4.RELEASE.jar:4.3.4.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:553) ~[spring-beans-4.3.4.RELEASE.jar:4.3.4.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482) ~[spring-beans-4.3.4.RELEASE.jar:4.3.4.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) ~[spring-beans-4.3.4.RELEASE.jar:4.3.4.RELEASE]
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) ~[spring-beans-4.3.4.RELEASE.jar:4.3.4.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) ~[spring-beans-4.3.4.RELEASE.jar:4.3.4.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) ~[spring-beans-4.3.4.RELEASE.jar:4.3.4.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1081) ~[spring-context-4.3.4.RELEASE.jar:4.3.4.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:856) ~[spring-context-4.3.4.RELEASE.jar:4.3.4.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542) ~[spring-context-4.3.4.RELEASE.jar:4.3.4.RELEASE]
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122) ~[spring-boot-1.4.2.RELEASE.jar:1.4.2.RELEASE]
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:761) [spring-boot-1.4.2.RELEASE.jar:1.4.2.RELEASE]
    at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:371) [spring-boot-1.4.2.RELEASE.jar:1.4.2.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:315) [spring-boot-1.4.2.RELEASE.jar:1.4.2.RELEASE]
    at com.testOrg.Application.main(Application.java:17) [main/:?]
Caused by: org.hibernate.AssertionFailure: AttributeConverter class [class com.testOrg.location.uk.service.converter.InvertedBooleanTFConverter] registered multiple times
    at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.addAttributeConverter(InFlightMetadataCollectorImpl.java:353) ~[hibernate-core-5.0.11.Final.jar:5.0.11.Final]
    at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.addAttributeConverter(InFlightMetadataCollectorImpl.java:386) ~[hibernate-core-5.0.11.Final.jar:5.0.11.Final]
    at org.hibernate.boot.model.source.internal.annotations.AnnotationMetadataSourceProcessorImpl$AttributeConverterManager.addAttributeConverter(AnnotationMetadataSourceProcessorImpl.java:321) ~[hibernate-core-5.0.11.Final.jar:5.0.11.Final]
    at org.hibernate.boot.model.source.internal.annotations.AnnotationMetadataSourceProcessorImpl.categorizeAnnotatedClass(AnnotationMetadataSourceProcessorImpl.java:117) ~[hibernate-core-5.0.11.Final.jar:5.0.11.Final]
    at org.hibernate.boot.model.source.internal.annotations.AnnotationMetadataSourceProcessorImpl.<init>(AnnotationMetadataSourceProcessorImpl.java:104) ~[hibernate-core-5.0.11.Final.jar:5.0.11.Final]
    at org.hibernate.boot.model.process.spi.MetadataBuildingProcess$1.<init>(MetadataBuildingProcess.java:147) ~[hibernate-core-5.0.11.Final.jar:5.0.11.Final]
    at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:141) ~[hibernate-core-5.0.11.Final.jar:5.0.11.Final]
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:847) ~[hibernate-entitymanager-5.0.11.Final.jar:5.0.11.Final]
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:874) ~[hibernate-entitymanager-5.0.11.Final.jar:5.0.11.Final]
    at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:60) ~[spring-orm-4.3.4.RELEASE.jar:4.3.4.RELEASE]
    at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:353) ~[spring-orm-4.3.4.RELEASE.jar:4.3.4.RELEASE]
    at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:373) ~[spring-orm-4.3.4.RELEASE.jar:4.3.4.RELEASE]
    at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:362) ~[spring-orm-4.3.4.RELEASE.jar:4.3.4.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1642) ~[spring-beans-4.3.4.RELEASE.jar:4.3.4.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1579) ~[spring-beans-4.3.4.RELEASE.jar:4.3.4.RELEASE]
    ... 14 more
Disconnected from the target VM, address: '127.0.0.1:54978', transport: 'socket'
:web:bootRun FAILED

解决方案

Somehow the @EnableAutoconfiguration of JPA were passing two paths to get scanned, because the database configuration was in sub folder which makes sense.

com.testOrg

com.testOrg.configuration

org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManager on line 520 is adding converters multiple times based on the number of scanned configuration paths found, I think for other classes we do not have check for duplicacy but for Converters we do have check if it gets registered multiple times than throw Exception see. com.testOrg.configuration.MetadataBuilderImpl.java line 907

To solve this, I moved my DatabaseConfiguration class out of "com.testOrg.configuration" folder to main and hence only one class to register.

I hope this might be helpful for someone.

这篇关于Hibernate 5.0.11 - AttributeConverter类注册了多次的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆