有什么方法可以获取给定实体对象的EntityManager句柄?我正在将Spring Boot 1.2.3与JPA Starter配合使用,并且进一步使用以下命令显式配置多个数据源@configuration
@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
NoSuchBeanDefinitionException
假设我的实体被叫,Customer然后我尝试了
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;
没有运气。
这取决于你如何已经配置这一点,但你有没有试图 注入 了EntityManager一个限定词对应于工厂创建它?
EntityManager
这是一个带有两个数据源的示例项目。如果要注入EntityManager订单,只需在项目的任何Spring bean中执行以下操作
@Service public class FooService { private final EntityManager entityManager; @Autowired public FooService(@Qualifier("orderEntityManager") EntityManager entityManager) { ... } }
对于客户,请使用customerEntityManager。
customerEntityManager
当然,您可以改用持久单元名称,即
@PersistenceContext(unitName = "customers") private EntityManager entityManager; @PersistenceContext(unitName = "orders") private EntityManager entityManager;
检查项目的配置以获取更多详细信息。