小编典典

在Spring Boot中获取EntityManager的句柄

spring-boot

有什么方法可以获取给定实体对象的EntityManager句柄?我正在将Spring Boot 1.2.3与JPA
Starter配合使用,并且进一步使用以下命令显式配置多个数据源@configuration

我已检查解决]对实体管理器的SPRINGBOOT访问权限,但似乎无法回答问题。

谢谢。

编辑:我添加了有关如何定义数据源的描述:

@Component
@Configuration
public class DataSources {
    @Bean
    @Primary
    @ConfigurationProperties(prefix="first.datasource")
    public DataSource getPrimaryDataSource() {
        return DataSourceBuilder.create().build();
    }

    @Bean
    @ConfigurationProperties(prefix="second.datasource")
    public DataSource getSecondDataSource() {
        return DataSourceBuilder.create().build();
    }

    @Bean
    @ConfigurationProperties(prefix="third.final.datasource")
    public DataSource getThirdFinalDataSource() {
        return DataSourceBuilder.create().build();
    }
}

在我的application.yml中,我有以下部分

first.datasource:
  name: 'first_datasource',
  #other attributes...
second.datasource:
  name: 'second_datasource',
  #other attributes...
third.final.datasource:
  name: 'first_datasource',
  #other attributes...

到目前为止,我已经尝试了@Stephane的两个建议,但得到了 NoSuchBeanDefinitionException

假设我的实体被叫,Customer然后我尝试了

@Service
public class FooService {

    private final EntityManager entityManager;

    @Autowired
    public FooService(@Qualifier("customerEntityManager") EntityManager entityManager) {
        ...
    }

}

但是我也尝试过

@PersistenceContext(unitName = "customer") // also tried "customers" and "first_datasource"
private EntityManager entityManager;

没有运气。


阅读 814

收藏
2020-05-30

共1个答案

小编典典

这取决于你如何已经配置这一点,但你有没有试图 注入EntityManager一个限定词对应于工厂创建它?

这是一个带有两个数据源的示例项目。如果要注入EntityManager订单,只需在项目的任何Spring bean中执行以下操作

@Service
public class FooService {

    private final EntityManager entityManager;

    @Autowired
    public FooService(@Qualifier("orderEntityManager") EntityManager entityManager) {
        ...
    }

}

对于客户,请使用customerEntityManager

当然,您可以改用持久单元名称,即

@PersistenceContext(unitName = "customers")
private EntityManager entityManager;

@PersistenceContext(unitName = "orders")
private EntityManager entityManager;

检查项目的配置以获取更多详细信息。

2020-05-30