定义哪个实体管理器与JpaRepository

时间:2016-01-14 22:15:47

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

我正在编写一个Spring Boot应用程序,它有多个dataSources和entityManagers,我想使用JPA CrudRepository接口,如:

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

我收到以下错误:

  

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

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

的EntityManagerFactory

2 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:2)

在属性上检查documentation

在Java配置类中使用下面的@EnableJpaRepositories注释 具有entityManagerFactoryReftransactionManagerRef属性。

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

删除@Repository界面上的Car注释。如果指定basePackages属性,Spring会将其注册为JPA存储库。