【问题标题】:Hibernate error in Spring boot initialized JPA applicationSpring boot初始化的JPA应用程序中的休眠错误
【发布时间】:2018-04-25 15:56:02
【问题描述】:

我使用 spring boot 1.5.8 使用 JPA 初始化 Web 应用程序,但是它不允许我启动应用程序。它显示休眠错误。应该spring-boot-starter-data-jpa 会安装相关的依赖,但似乎不是:

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaAutoConfiguration.class]: Unsatisfied dependency expressed through method 'entityManagerFactory' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'entityManagerFactoryBuilder' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaAutoConfiguration.class]: Unsatisfied dependency expressed through method 'entityManagerFactoryBuilder' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jpaVendorAdapter' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaAutoConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.orm.jpa.JpaVendorAdapter]: Factory method 'jpaVendorAdapter' threw exception; nested exception is java.lang.NoClassDefFoundError: org/hibernate/HibernateException
...
...
...
Caused by: java.lang.ClassNotFoundException: org.hibernate.HibernateException
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381) ~[na:1.8.0_144]
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424) ~[na:1.8.0_144]
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335) ~[na:1.8.0_144]
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[na:1.8.0_144]
    ... 60 common frames omitted

以下是我在 pom.xml 中的依赖项:

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.8.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-rest</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

【问题讨论】:

  • class org.hibernate.HibernateException 应该存在于hibernate-core 中,如果存在,请尝试检查您的 maven 依赖项,如果是的话。删除 ~/.m2/reopsitory 和 maven>更新你的项目。如果这些已损坏,它应该更新您的依赖项。

标签: spring-boot


【解决方案1】:

你没有再添加一个依赖项

<Dependency>
<groupId>org.hibernate</groupId> <artifactId>hibernate-entitymanager</artifactId> <version>3.6.3.Final</version> </dependency>

【讨论】:

    【解决方案2】:

    原因是版本 1.5.8 有问题。使用其他版本的 Spring 引导初始化程序。我不需要添加或删除任何依赖项,它现在可以工作了:

    改成

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.0.BUILD-SNAPSHOT</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    

    【讨论】:

    • 非常好的解决方案。我也遇到了同样的问题,换了1.5.7版本也没问题。
    • 我使用的是公司母公司,所以这不是一个选择,但是这个解决方案解决了我在相关帖子上的问题。 stackoverflow.com/a/43328124/2023810
    【解决方案3】:

    删除您的本地存储库,然后运行 ​​Maven 更新项目。应该没问题。 因为你的 Maven 依赖是冲突的。

    【讨论】:

      【解决方案4】:

      试试springBootVersion = '1.5.8.RELEASE'

      我可以在hibernate-core-5.0.12.Final-sources.jar 中找到org.hibernate.HibernateException

      【讨论】:

        【解决方案5】:

        你忘记了一个依赖:

        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>C.X.X.Final</version>
        </dependency>
        

        X 是 Hibernate 的版本。

        现在你需要移除这个依赖:

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        

        Spring Boot 会自动尝试为 JPA 创建实体工厂,但您没有定义任何关于 JPA 模型的内容。

        【讨论】:

        • 现在出现另一个错误:Caused by: java.lang.IllegalArgumentException: At least one JPA metamodel must be present!。我想弹簧初始化器应该设置一切。
        • 我绝对需要 JPA
        猜你喜欢
        • 2016-06-30
        • 2019-12-06
        • 1970-01-01
        • 2017-06-13
        • 1970-01-01
        • 2020-02-12
        • 2017-03-28
        • 2017-01-24
        相关资源
        最近更新 更多