Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.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
Java Spring引导和Hibernate 5的类加载错误_Java_Hibernate_Spring Boot_Hibernate 4.x_Hibernate 5.x - Fatal编程技术网

Java Spring引导和Hibernate 5的类加载错误

Java Spring引导和Hibernate 5的类加载错误,java,hibernate,spring-boot,hibernate-4.x,hibernate-5.x,Java,Hibernate,Spring Boot,Hibernate 4.x,Hibernate 5.x,我最近将一个基于Spring引导的应用程序从Hibernate 4升级到Hibernate 5。从那时起,我观察到一个类加载问题。显然,hibernate类和my domain类是由两个不同的类装入器装入的。只有在使用SpringDevTools和Hibernate5启动应用程序时才会发生这种情况。DevTools/Hibernate 4、mvn-spring-boot:run/Hibernate 5的组合可以工作 这个问题可以通过以下简单的spring boot应用程序重现(完整的eclips

我最近将一个基于Spring引导的应用程序从Hibernate 4升级到Hibernate 5。从那时起,我观察到一个类加载问题。显然,hibernate类和my domain类是由两个不同的类装入器装入的。只有在使用SpringDevTools和Hibernate5启动应用程序时才会发生这种情况。DevTools/Hibernate 4、mvn-spring-boot:run/Hibernate 5的组合可以工作

这个问题可以通过以下简单的spring boot应用程序重现(完整的eclipse项目可用)


使用Spring Boot支持Hibernate 5存在一个公开问题

在您的示例中,有两个类加载器:

  • 系统类加载器
  • Spring Boot DevTools类加载器,支持重启功能
  • Hibernate ClassLoaderService的默认实现通过首先查看自己的类装入器,然后查看spring类装入器来解析类

    您的类由spring(使用restartclassloader)加载,通过持久化单元分配给hibernate,但是hibernate使用他的ClassLoaderService重新加载这个类,并在他自己的classloader(system cl)中找到它。加载了两个类,结果就是您看到的错误

    Spring可以配置为在restart classloader中加载hibernate,但我没有成功隔离一组库:仅添加hibernate-*失败,来自Spring orm或EntityManager的错误在proxybuilder中不可见

    一个可行的解决方法(但确实很难看!):加载项
    META-INF/spring devtools.properties

    restart.include.all=.*
    

    我想有比这个更好的解决方案

    你能解释一下它的作用吗@杰里米B酒店
    2016-02-15 18:30:48.315  INFO 13828 --- [  restartedMain] o.h.t.schema.internal.SchemaCreatorImpl  : HHH000476: Executing import script 'org.hibernate.tool.schema.internal.exec.ScriptSourceInputNonExistentImpl@55ad1b60'
    2016-02-15 18:30:48.509  INFO 13828 --- [  restartedMain] o.s.b.d.a.OptionalLiveReloadServer       : LiveReload server is running on port 35729
    2016-02-15 18:30:48.536  INFO 13828 --- [  restartedMain] o.s.j.e.a.AnnotationMBeanExporter        : Registering beans for JMX exposure on startup
    2016-02-15 18:30:48.582 ERROR 13828 --- [  restartedMain] o.h.p.access.spi.GetterMethodImpl        : HHH000122: IllegalArgumentException in class: problem.domain.Employee, getter method of property: id
    2016-02-15 18:30:48.583 ERROR 13828 --- [  restartedMain] o.s.boot.SpringApplication               : Application startup failed
    
    java.lang.IllegalStateException: Failed to execute ApplicationRunner
        at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:800) [spring-boot-1.3.2.RELEASE.jar:1.3.2.RELEASE]
        at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:787) [spring-boot-1.3.2.RELEASE.jar:1.3.2.RELEASE]
        at org.springframework.boot.SpringApplication.afterRefresh(SpringApplication.java:777) [spring-boot-1.3.2.RELEASE.jar:1.3.2.RELEASE]
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:308) [spring-boot-1.3.2.RELEASE.jar:1.3.2.RELEASE]
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:1191) [spring-boot-1.3.2.RELEASE.jar:1.3.2.RELEASE]
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:1180) [spring-boot-1.3.2.RELEASE.jar:1.3.2.RELEASE]
        at problem.main.SpringBootMain.main(SpringBootMain.java:10) [classes/:na]
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_66]
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_66]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_66]
        at java.lang.reflect.Method.invoke(Method.java:497) ~[na:1.8.0_66]
        at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49) [spring-boot-devtools-1.3.2.RELEASE.jar:1.3.2.RELEASE]
    Caused by: org.hibernate.PropertyAccessException: IllegalArgumentException occurred calling getter of problem.domain.Employee.id
        at org.hibernate.property.access.spi.GetterMethodImpl.get(GetterMethodImpl.java:64) ~[hibernate-core-5.1.0.Final.jar:5.1.0.Final]
        at org.hibernate.tuple.entity.AbstractEntityTuplizer.getIdentifier(AbstractEntityTuplizer.java:223) ~[hibernate-core-5.1.0.Final.jar:5.1.0.Final]
        at org.hibernate.persister.entity.AbstractEntityPersister.getIdentifier(AbstractEntityPersister.java:4633) ~[hibernate-core-5.1.0.Final.jar:5.1.0.Final]
        at org.hibernate.persister.entity.AbstractEntityPersister.isTransient(AbstractEntityPersister.java:4344) ~[hibernate-core-5.1.0.Final.jar:5.1.0.Final]
        at org.hibernate.engine.internal.ForeignKeys.isTransient(ForeignKeys.java:226) ~[hibernate-core-5.1.0.Final.jar:5.1.0.Final]
        at org.hibernate.event.internal.AbstractSaveEventListener.getEntityState(AbstractSaveEventListener.java:499) ~[hibernate-core-5.1.0.Final.jar:5.1.0.Final]
        at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:99) ~[hibernate-core-5.1.0.Final.jar:5.1.0.Final]
        at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:58) ~[hibernate-core-5.1.0.Final.jar:5.1.0.Final]
        at org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:778) ~[hibernate-core-5.1.0.Final.jar:5.1.0.Final]
        at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:751) ~[hibernate-core-5.1.0.Final.jar:5.1.0.Final]
        at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:756) ~[hibernate-core-5.1.0.Final.jar:5.1.0.Final]
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_66]
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_66]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_66]
        at java.lang.reflect.Method.invoke(Method.java:497) ~[na:1.8.0_66]
        at org.hibernate.context.internal.ThreadLocalSessionContext$TransactionProtectionWrapper.invoke(ThreadLocalSessionContext.java:338) ~[hibernate-core-5.1.0.Final.jar:5.1.0.Final]
        at com.sun.proxy.$Proxy56.persist(Unknown Source) ~[na:na]
        at problem.main.DatabaseInitializer.run(DatabaseInitializer.java:24) ~[classes/:na]
        at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:797) [spring-boot-1.3.2.RELEASE.jar:1.3.2.RELEASE]
        ... 11 common frames omitted
    Caused by: java.lang.IllegalArgumentException: object is not an instance of declaring class
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_66]
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_66]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_66]
        at java.lang.reflect.Method.invoke(Method.java:497) ~[na:1.8.0_66]
        at org.hibernate.property.access.spi.GetterMethodImpl.get(GetterMethodImpl.java:41) ~[hibernate-core-5.1.0.Final.jar:5.1.0.Final]
        ... 29 common frames omitted
    
    2016-02-15 18:30:48.585  INFO 13828 --- [  restartedMain] .b.l.ClasspathLoggingApplicationListener : Application failed to start with classpath: [file:/D:/P20058/Documents/FH/Lehre/SWT6U/Uebungen/SpringWeb/hibernate5-problem/target/classes/]
    2016-02-15 18:30:48.585  INFO 13828 --- [  restartedMain] utoConfigurationReportLoggingInitializer : 
    
    Error starting ApplicationContext. To display the auto-configuration report enable debug logging (start with --debug)
    
    
    2016-02-15 18:30:48.585  INFO 13828 --- [  restartedMain] s.c.a.AnnotationConfigApplicationContext : Closing org.springframework.context.annotation.AnnotationConfigApplicationContext@63e38bca: startup date [Mon Feb 15 18:30:46 CET 2016]; root of context hierarchy
    2016-02-15 18:30:48.587  INFO 13828 --- [  restartedMain] o.s.j.e.a.AnnotationMBeanExporter        : Unregistering JMX-exposed beans on shutdown
    2016-02-15 18:30:48.587  INFO 13828 --- [  restartedMain] .SchemaDropperImpl$DelayedDropActionImpl : HHH000477: Starting delayed drop of schema as part of SessionFactory shut-down'
    2016-02-15 18:30:48.604  INFO 13828 --- [  restartedMain] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default'
    2016-02-15 18:30:48.604  INFO 13828 --- [  restartedMain] .SchemaDropperImpl$DelayedDropActionImpl : HHH000477: Starting delayed drop of schema as part of SessionFactory shut-down'
    
    restart.include.all=.*