Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate 5和Spring Boot 2-多次注册AttributeConverter类_Hibernate_Spring Boot_Intellij Idea_Hibernate 5.x - Fatal编程技术网

Hibernate 5和Spring Boot 2-多次注册AttributeConverter类

Hibernate 5和Spring Boot 2-多次注册AttributeConverter类,hibernate,spring-boot,intellij-idea,hibernate-5.x,Hibernate,Spring Boot,Intellij Idea,Hibernate 5.x,在我的Spring Boot应用程序中,我有一个简单的JPAAttributeConverter声明如下: @Converter(autoApply = true) public class GenderConverter implements AttributeConverter<Gender, String> {...} 如果我使用IntelliJ IDEA运行/调试配置来启动Spring Boot应用程序,则上下文初始化会失败,因为AssertionFailure异常。如果我

在我的Spring Boot应用程序中,我有一个简单的JPA
AttributeConverter
声明如下:

@Converter(autoApply = true)
public class GenderConverter implements AttributeConverter<Gender, String> {...}
如果我使用IntelliJ IDEA运行/调试配置来启动Spring Boot应用程序,则上下文初始化会失败,因为
AssertionFailure
异常。如果我使用
gradle clean bootRun
该应用程序将成功启动。所以它看起来像是IDE中的一个bug或者是项目设置中的一个错误

我调试并转储了转换器的两个后续注册的堆栈跟踪,但我仍然不明白为什么会发生两次。请分析这些痕迹

首次注册(无错误):

第二次注册(错误!):


这似乎是IntelliJ IDEA和Spring Boot的问题。以下步骤帮助我在Ubuntu中解决了这个问题,但在Windows10中没有

  • 从build.gradle中删除
    devtools
    依赖项:
  • //运行时类路径组:'org.springframework.boot',名称:'spring boot devtools'
    
  • 构建>清理项目

  • 关闭IntelliJ IDEA:

    文件>退出

  • 执行
    gradle clean

  • 从项目根文件夹中删除文件夹:build、out、.gradle:

  • rm-rf构建。渐变
    
  • 清除系统缓存:

    启动IntelliJ IDEA并进入菜单文件>使缓存无效/重新启动

  • IntelliJ正在更新索引,请稍候


  • 现在再次尝试运行调试配置。重建项目需要一段时间,但之后它应该会成功启动。

    IntelliJ IDEA和Spring Boot似乎存在问题。以下步骤帮助我在Windows 10中解决了此问题

  • 打开设置CTRL+ALT+S
  • 转到构建、执行、部署|构建工具| Gradle |
  • 取消选中“将IDE生成/运行操作委派给Gradle”
  • 现在再次尝试运行调试配置

    @Entity
    public class User {
        @Column(length = 1, nullable = false)
        private Gender gender;
        // ...
    }
    
      at org.hibernate.boot.internal.AttributeConverterManager.addConverter(AttributeConverterManager.java:44)
      at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.addAttributeConverter(InFlightMetadataCollectorImpl.java:353)
      at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:118)
      at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:861)
      at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:888)
      at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:57)
      at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:365)
      at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:390)
      at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:377)
      at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:341)
      at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1758)
      at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1695)
      at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:573)
      at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:495)
      at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:317)
      at org.springframework.beans.factory.support.AbstractBeanFactory$$Lambda$122.379121284.getObject(Unknown Source:-1)
      at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
    ....
    
    Caused by: org.hibernate.AssertionFailure: AttributeConverter class [class by.naxa.example.conversion.GenderConverter] registered multiple times
        at org.hibernate.boot.internal.AttributeConverterManager.addConverter(AttributeConverterManager.java:46) ~[hibernate-core-5.2.17.Final.jar:5.2.17.Final]
        at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.addAttributeConverter(InFlightMetadataCollectorImpl.java:353) ~[hibernate-core-5.2.17.Final.jar:5.2.17.Final]
        at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.addAttributeConverter(InFlightMetadataCollectorImpl.java:363) ~[hibernate-core-5.2.17.Final.jar:5.2.17.Final]
        at org.hibernate.boot.model.source.internal.annotations.AnnotationMetadataSourceProcessorImpl$AttributeConverterManager.addAttributeConverter(AnnotationMetadataSourceProcessorImpl.java:325) ~[hibernate-core-5.2.17.Final.jar:5.2.17.Final]
        at org.hibernate.boot.model.source.internal.annotations.AnnotationMetadataSourceProcessorImpl.categorizeAnnotatedClass(AnnotationMetadataSourceProcessorImpl.java:118) ~[hibernate-core-5.2.17.Final.jar:5.2.17.Final]
        at org.hibernate.boot.model.source.internal.annotations.AnnotationMetadataSourceProcessorImpl.<init>(AnnotationMetadataSourceProcessorImpl.java:105) ~[hibernate-core-5.2.17.Final.jar:5.2.17.Final]
        at org.hibernate.boot.model.process.spi.MetadataBuildingProcess$1.<init>(MetadataBuildingProcess.java:147) ~[hibernate-core-5.2.17.Final.jar:5.2.17.Final]
        at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:141) ~[hibernate-core-5.2.17.Final.jar:5.2.17.Final]
        at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:861) ~[hibernate-core-5.2.17.Final.jar:5.2.17.Final]
        at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:888) ~[hibernate-core-5.2.17.Final.jar:5.2.17.Final]
        at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:57) ~[spring-orm-5.0.9.RELEASE.jar:5.0.9.RELEASE]
        at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:365) ~[spring-orm-5.0.9.RELEASE.jar:5.0.9.RELEASE]
        at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:390) ~[spring-orm-5.0.9.RELEASE.jar:5.0.9.RELEASE]
        at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:377) ~[spring-orm-5.0.9.RELEASE.jar:5.0.9.RELEASE]
        at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:341) ~[spring-orm-5.0.9.RELEASE.jar:5.0.9.RELEASE]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1758) ~[spring-beans-5.0.9.RELEASE.jar:5.0.9.RELEASE]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1695) ~[spring-beans-5.0.9.RELEASE.jar:5.0.9.RELEASE]
        ....
    
    @SpringBootApplication
    public class MysqlApplication {
        public static void main(String[] args) {
            SpringApplication.run(MysqlApplication.class, args);
        }
    }