我们需要使用 JPA 将记录插入到两个数据源中。
解决这个问题的正确方法是什么?
我们如何声明具有不同数据源的不同持久性单元并管理两个实体管理器并为默认单元名称注入默认持久性上下文,而不在第一个数据源的通用 dao 中提及单元名称并在单独的 dao 中用单元名称覆盖上下文对于第二个数据源中的其他表。
spring 文档非常有限,没有示例。
例子会有很大帮助。
利用
<bean class="..." primary="true" />
或者@Primary
如果您正在使用注释。
这将表明一个实例是您定义多个不同实例的类型的“默认”实例(如您的 EntityManagerFactory)。
如果您遵循本教程http://javacodegeeks.blogspot.com/2010/05/jboss-42x-spring-3-jpa-hibernate.html ,您可以进行以下更改以访问两个不同的数据库:
persistence.xml,为您的第二个数据库定义第二个持久性单元。spring.xml,以不同的名称定义第二个 entityManagerFactory bean,让我们说“entityManagerFactoryDB2”并将其配置为使用第二个数据库的持久单元。对于您要访问第二个数据库的每个 DAO,包括以下内容:
@Autowired
private EntityManagerFactory entityManagerFactoryDB2;
@PostConstruct
public void init() {
super.setEntityManagerFactory(entityManagerFactoryDB2);
}
就这样!
在 Spring 服务类上,像往常一样使用 DAO!