1

我正在使用 ObjectDB 在 Spring-Boot 中实现一个程序。要实际使用 ObjectDB,我遵循了这种方法https://www.objectdb.com/forum/2523,它运行良好。

但是,一旦我想使用 Spring-Actuator,就会收到以下错误:

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 中添加了 Spring-Actuator,如下所示:

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
4

1 回答 1

3

发生故障是因为 Spring Boot 试图解开 JPAEntityManagerFactory以获取 Hibernate 的SessionFactory. 它试图这样做,因为您在类路径上有 Hibernate(它是 的依赖项spring-boot-starter-data-jpa)。根据 JPA 规范,unwrap应该抛出一个PersistenceException“如果提供者不支持调用”。Spring Boot在不支持PersistenceException的情况下捕获。unwrap不幸的是,ObjectDB 正在抛出com.objectdb.o.UserException不符合规范的问题。我建议将此作为 ObjectDB 错误提出。

您可以通过从类路径中排除 Hibernate 来避免该问题。这将阻止 Spring Boot 尝试解开 Hibernate 的包装SessionFactory,从而防止 ObjectDB 错误的发生。spring-boot-starter-data-jpa您可以通过在您的依赖项中添加排除项来做到这一点pom.xml

<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>
于 2021-02-06T16:43:37.007 回答