【问题标题】:inserting records in two databases using jpa + hibernate + spring使用 jpa + hibernate + spring 在两个数据库中插入记录
【发布时间】:2012-10-04 12:19:51
【问题描述】:

我们需要使用 JPA 将记录插入到两个数据源中。

解决这个问题的正确方法是什么?

我们如何声明具有不同数据源的不同持久性单元并管理两个实体管理器并为默认单元名称注入默认持久性上下文,而不在第一个数据源的通用 dao 中提及单元名称并用单元名称覆盖上下文第二个数据源中其他表的单独 dao。

spring 文档非常有限,没有示例。

例子会有很大帮助。

【问题讨论】:

  • 每个数据源上的记录/表是否相同?
  • 不,它们是不同的记录.. 但是一张表的 id 正在另一张表中使用。它们是旧表..所以那里没有太多修改空间
  • 持久性依赖注入失败;嵌套异常是 org.springframework.beans.factory.NoSuchBeanDefinitionException: No unique bean of type [javax.persistence.EntityManagerFactory] ​​is defined: expected single bean but found 2
  • 这感觉就像你应该用触发器或复制做的事情
  • 我们不允许使用触发器。

标签: spring hibernate jpa


【解决方案1】:

使用

<bean class="..." primary="true" />

@Primary,如果您正在使用注释。

这将表明一个实例是您定义多个不同实例的类型的“默认”实例(例如您的 EntityManagerFactory)。

【讨论】:

【解决方案2】:

如果您遵循本教程,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!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-09
    • 2012-01-31
    • 1970-01-01
    • 2019-08-16
    • 1970-01-01
    • 2021-02-25
    • 2023-03-10
    • 1970-01-01
    相关资源
    最近更新 更多