java - 创建 HibernateJpaVendorAdapter 实例失败。为什么?

标签 java spring hibernate jpa

我根据“Spring in Action”第 11 章创建了一个 spring JPA 示例。

Java配置代码:

@Bean
public JpaVendorAdapter jpaVendorAdapter() {
    System.out.println("hello");
    HibernateJpaVendorAdapter adapter = new HibernateJpaVendorAdapter();
    System.out.println(adapter);
    adapter.setDatabase(Database.MYSQL);
    adapter.setShowSql(true);
    adapter.setGenerateDdl(false);
    adapter.setDatabasePlatform("org.hibernate.dialect.MySQLDialect");
    return  adapter;
}

@Bean
public EntityManagerFactory entityManagerFactory(DataSource dataSource, JpaVendorAdapter jpaVendorAdapter) {
    LocalContainerEntityManagerFactoryBean emfb = new LocalContainerEntityManagerFactoryBean();
    emfb.setDataSource(dataSource);
    //emfb.setPersistenceUnitName("test");
    emfb.setJpaVendorAdapter(jpaVendorAdapter);
    emfb.setPackagesToScan("com.springinaction.test");
    EntityManagerFactory emf = emfb.getObject();
    System.out.println(emf);
    return emf;
}

@Bean
public PlatformTransactionManager annotationDrivenTransactionManager(EntityManagerFactory emf) {
    //System.out.println(emf);
    JpaTransactionManager transactionManager = new JpaTransactionManager();
    transactionManager.setEntityManagerFactory(emf);
    return transactionManager;
}

与 Spring JPA 关联的 Maven 依赖项:

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-core</artifactId>
    <version>4.0.0.Final</version>
</dependency>
<dependency>
    <groupId>org.hibernate.javax.persistence</groupId>
    <artifactId>hibernate-jpa-2.0-api</artifactId>
    <version>1.0.1.Final</version>
</dependency>

程序运行良好直到这行代码:

System.out.println("hello");
HibernateJpaVendorAdapter adapter = new HibernateJpaVendorAdapter();

失败并显示以下错误消息:

hello
Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jpaVendorAdapter' defined in class com.springinaction.test.JdbcConfig: Instantiation of bean failed; nested exception is org.springframework.beans.factory.BeanDefinitionStoreException: Factory method [public org.springframework.orm.jpa.JpaVendorAdapter com.springinaction.test.JdbcConfig.jpaVendorAdapter()] threw exception; nested exception is java.lang.NoClassDefFoundError: org/hibernate/ejb/HibernatePersistence

有人对我说原因可能是缺少 hibernate-entitymanger.jar,但我在本地 Maven 存储库中找到了这个 jar。

有人说原因是缺少 ejb3-persistence.jar,但我找不到为此的 Maven groupId/artifactId。

有人可以向我解释一下吗?

最佳答案

org.hibernate.ejb.HibernatePersistence 类是 hibernate-entitymanager jar 的一部分。请检查此 jar 是否在您的项目类路径或已部署的 war 文件中。还要检查此 jar 文件的版本。您应该在 pom.xml 中提供 hibernate-entitymanager 依赖项,而不是提供 hibernate-core 和 hibernate-jpa 依赖项,这将下载所有必需的依赖项。您可以在https://mvnrepository.com/artifact/org.hibernate/hibernate-entitymanager/5.2.2.Final查看相同内容

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

Spring In Action 的源代码位于 https://manning-content.s3.amazonaws.com/download/9/ef4e0ef-b7bd-4ab8-857d-eb635d18d425/SpringiA4_SourceCode.zip 。您可以检查 build.gradle 文件是否使用了依赖项。

关于java - 创建 HibernateJpaVendorAdapter 实例失败。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39312982/

相关文章:

java - 连接四左移右移索引越界

java - Selenium FireFoxDriver 配置文件在加载 Firefox 后发生变化吗?

java - 带有西里尔字符的 HTML 到 PDF

java - 注入(inject) Autowiring 的依赖项失败;无法 Autowiring 字段

java - 如何在spring Controller 中绑定(bind)来自jsp的对象

java - 启动时 hibernate 异常

Java - 强制转换产生的对象是否与强制转换的对象具有相同的引用值?

spring - 在没有 @DirtiesContext 的情况下,如何在 Quarkus 中实现集成测试?

在处理基础知识时 hibernate 子树的意外结尾

java - 在IDE中执行Jar文件并获取输出(字符串)?