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
Spring boot 结合ObjectDB使用弹簧执行器_Spring Boot_Objectdb_Spring Actuator - Fatal编程技术网

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

我正在使用ObjectDB在Spring Boot中实现一个程序。为了实际使用ObjectDB,我采用了这种非常有效的方法

然而,只要我想使用弹簧执行器,我就会得到以下错误:

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试图打开JPA
EntityManager工厂
以获取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试图打开JPA
EntityManager工厂
以获取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)都有效。