diff --git a/IX. ‘How-to’ guides/67.7. Use Two EntityManagers.md b/IX. ‘How-to’ guides/67.7. Use Two EntityManagers.md index e69de29..165c326 100644 --- a/IX. ‘How-to’ guides/67.7. Use Two EntityManagers.md +++ b/IX. ‘How-to’ guides/67.7. Use Two EntityManagers.md @@ -0,0 +1,29 @@ +### 67.7. 使用两个EntityManagers + +即使默认的EntityManagerFactory工作的很好,你也需要定义一个新的EntityManagerFactory,因为一旦出现第二个该类型的bean,默认的将会被关闭。为了轻松的实现该操作,你可以使用Spring Boot提供的EntityManagerBuilder,或者如果你喜欢的话可以直接使用来自Spring ORM的LocalContainerEntityManagerFactoryBean。 + +示例: +```java +// add two data sources configured as above + +@Bean +public LocalContainerEntityManagerFactoryBean customerEntityManagerFactory( + EntityManagerFactoryBuilder builder) { + return builder + .dataSource(customerDataSource()) + .packages(Customer.class) + .persistenceUnit("customers") + .build(); +} + +@Bean +public LocalContainerEntityManagerFactoryBean orderEntityManagerFactory( + EntityManagerFactoryBuilder builder) { + return builder + .dataSource(orderDataSource()) + .packages(Order.class) + .persistenceUnit("orders") + .build(); +} +``` +上面的配置靠自己基本可以运行。想要完成作品你也需要为两个EntityManagers配置TransactionManagers。其中的一个会被Spring Boot默认的JpaTransactionManager获取,如果你将它标记为`@Primary`。另一个需要显式注入到一个新实例。或你可以使用一个JTA事物管理器生成它两个。