如何使用Hibernate将数据从一个数据库传输到另一个数据库?

时间:2020-03-06 15:01:30  来源:igfitidea点击:

我有一个具有域模型的应用程序A,该应用程序使用Hibernate映射到数据库。我有另一个应用程序B,它使用与A完全相同的域模型类,并添加了一些其他类。

我的目标是从应用程序B中的数据库A读取数据,并将该数据传输到B的数据库中(以对其进行复制)。此外,B的某些域类与A的域类具有关联(OneToOne)(当然,在B的数据库中)。

做到这一点的最佳策略是什么?我想到了两个会话工厂,并使用了" Session.replicate()"(这是如何工作的?)。还是我应该在这两个域模型之间更好地引入一个额外的映射层以实现松散耦合?

解决方案

复制的目的是什么?那是应用程序流程或者逻辑的一部分吗?还是只是直接复制数据?

如果仅出于复制数据的目的,则无需使用休眠模式。有很多工具。

我已经在两个不同的数据库类型(在我的情况下为DB2和MS SQL Server)之间传输数据之前完成了此操作。我要做的是创建两个单独的会话工厂,并为它们提供相同的映射文件列表。然后,我简单地从一个记录中读取记录,然后将它们保存到另一个记录中。

当然,这假设两个数据源是相同的。

就像其他人指出的那样,我认为我们需要确切地知道我们要实现的目标。如果我们要进行一次迁移,那么有比Hibernate更好的工具来进行ETL(提取,转换,加载)。

如果我们真的坚持要在Hibernate中执行此操作(Daniel也适用于我们),我将执行以下操作:

  • 打开与数据库A的会话。
  • 读取我们要复制的所有类型的实体(确保已禁用延迟加载)
  • 打开与数据库B的会话。
  • 保存或者更新实体。

我会在单独的工具中执行此操作,而不是在应用程序A或者B中执行此操作。

另一方面,如果这是应用程序功能的一部分(例如,应用程序A是数据的管理控制台,而应用程序B使用数据),则我们可能希望做一些不同的事情。不知道我们要寻找的是很难说的。

最后,需要研究的东西是Hibernate Shards(http://shards.hibernate.org)。 /)。