Spring boot 结合ObjectDB使用弹簧执行器
我正在使用ObjectDB在Spring Boot中实现一个程序。为了实际使用ObjectDB,我采用了这种非常有效的方法 然而,只要我想使用弹簧执行器,我就会得到以下错误:Spring boot 结合ObjectDB使用弹簧执行器,spring-boot,objectdb,spring-actuator,Spring Boot,Objectdb,Spring Actuator,我正在使用ObjectDB在Spring Boot中实现一个程序。为了实际使用ObjectDB,我采用了这种非常有效的方法 然而,只要我想使用弹簧执行器,我就会得到以下错误: Error creating bean with name 'org.springframework.boot.actuate.autoconfigure.metrics.orm.jpa.HibernateMetricsAutoConfiguration': Injection of autowired dependenc
Error creating bean with name 'org.springframework.boot.actuate.autoconfigure.metrics.orm.jpa.HibernateMetricsAutoConfiguration': Injection of autowired dependencies failed; nested exception is com.objectdb.o.UserException: Unsupported unwrap(org.hibernate.SessionFactory.class) for EntityManagerFactory
关于如何解决这个错误有什么想法吗
我使用的代码与链接中的代码完全相同。我在pom中添加了弹簧执行器,如下所示:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
org.springframework.boot
弹簧靴起动器执行器
发生故障的原因是Spring Boot试图打开JPAEntityManager工厂
以获取Hibernate的会话工厂
。它正试图这样做,因为类路径上有Hibernate(它是spring boot starter数据jpa的依赖项)。根据JPA规范,unwrap
应该抛出一个PersistenceException
“如果提供者不支持调用”。如果不支持unwrap
,Spring Boot将捕获PersistenceException
。不幸的是,ObjectDB正在抛出不符合规范的com.ObjectDB.o.UserException
。我建议将其作为ObjectDB错误来提出
您可以通过从类路径中排除Hibernate来避免这个问题。这将阻止Spring Boot尝试打开Hibernate的会话工厂
,从而防止ObjectDB错误的发生。您可以通过在pom.xml
中的spring boot starter数据jpa
依赖项中添加排除项来完成此操作:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
<exclusions>
<exclusion>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
</exclusion>
</exclusions>
</dependency>
org.springframework.boot
spring引导启动器数据jpa
org.hibernate
冬眠核心
发生故障的原因是Spring Boot试图打开JPAEntityManager工厂
以获取Hibernate的会话工厂
。它正试图这样做,因为类路径上有Hibernate(它是spring boot starter数据jpa的依赖项)。根据JPA规范,unwrap
应该抛出一个PersistenceException
“如果提供者不支持调用”。如果不支持unwrap
,Spring Boot将捕获PersistenceException
。不幸的是,ObjectDB正在抛出不符合规范的com.ObjectDB.o.UserException
。我建议将其作为ObjectDB错误来提出
您可以通过从类路径中排除Hibernate来避免这个问题。这将阻止Spring Boot尝试打开Hibernate的会话工厂
,从而防止ObjectDB错误的发生。您可以通过在pom.xml
中的spring boot starter数据jpa
依赖项中添加排除项来完成此操作:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
<exclusions>
<exclusion>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
</exclusion>
</exclusions>
</dependency>
org.springframework.boot
spring引导启动器数据jpa
org.hibernate
冬眠核心
感谢您的报告和诊断。ObjectDB 2.8.4被修复为在不受支持的展开调用上抛出PersistenceException实例(实际上是一个子类的实例,但希望它现在能像预期的那样被捕获)。是的,谢谢!我可以确认这两种解决方案(添加排除和/或升级ObjectDB)都有效。感谢您的报告和诊断。ObjectDB 2.8.4被修复为在不受支持的展开调用上抛出PersistenceException实例(实际上是一个子类的实例,但希望它现在能像预期的那样被捕获)。是的,谢谢!我可以确认这两种解决方案(添加排除和/或升级ObjectDB)都有效。