【问题标题】:Define which entity manager is associated with JpaRepository定义与 JpaRepository 关联的实体管理器
【发布时间】:2016-04-20 10:36:30
【问题描述】:

我正在编写一个具有多个数据源和实体管理器的 Spring Boot 应用程序,我想使用 JPA CrudRepository 接口,例如:

@Repository public interface Car extends CrudRepository<Car.class, Long> {}.

我收到以下错误:

创建名为“carRepository”的 bean 时出错:在设置 bean 属性“entityManager”时,无法创建类型为 [org.springframework.orm.jpa.SharedEntityManagerCreator] 的内部 bean '(inner bean)#350d0774';嵌套异常是 org.springframework.beans.factory.BeanCreationException:创建名称为 '(inner bean)#350d0774' 的 bean 时出错:设置构造函数参数时无法解析对 bean 'entityManagerFactory' 的引用;嵌套异常是 org.springframework.beans.factory.BeanCreationException:创建类路径资源中定义的名称为“entityManagerFactory”的 bean 时出错

我无法弄清楚如何告诉 JpaRepositoryFactory 在构建存储库时使用哪个实体管理器。它默认尝试注入一个名为: entityManagerFactory 的 EntityManagerFactory

【问题讨论】:

  • 您的applicationContext.xml 或Java 配置是什么样的;您是否在配置中创建了 EntityManagerFactory Bean? Here is the documentation.

标签: spring spring-data spring-data-jpa


【解决方案1】:

在属性上检查这个documentation。

在您的 Java 配置类上使用下面的 @EnableJpaRepositories 注释 带有entityManagerFactoryRef 和transactionManagerRef 属性。

@EnableJpaRepositories(basePackages = {
        "com.myapp.repositories" }, entityManagerFactoryRef = "entityManagerFactoryRef1", transactionManagerRef = "transactionManagerRef1")

删除Car接口上的@Repository注解。如果您指定 basePackages 属性,Spring 会将其注册为 JPA 存储库。

【讨论】:

    【解决方案2】:

    你可以在你的 spring.xml 中做什么

        <jpa:repositories base-package="com.a.b.repository"
        entity-manager-factory-ref="yrEntityMAnagerFectorybeanRef"
        transaction-manager-ref="yourTransactionManagerBeanRef"/>
    

    在您的 EntityManagerFactory bean 中,您将引用您的 entitymanager bean。

    【讨论】:

      猜你喜欢
      • 2018-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-12
      • 1970-01-01
      • 1970-01-01
      • 2023-03-05
      • 2016-12-19
      相关资源
      最近更新 更多