如何从两个不同的数据库(DB2和Oracle)读取数据,并使用Hibernate将其持久化到另一个数据库(SQL Ser



我正在将一个旧的Unix服务器上的应用程序迁移到Linux服务器上,下面是我需要考虑的场景。

  1. 需要从DB2读取数据。
  2. 需要从Oracle读取数据。
  3. 需要将上述读取的数据保存到Sql Server中(此DB从上述两个数据库中消耗数据)
  4. 所有这些数据库都在不同的服务器上。

我能采取的最好方法是什么?我已经使用Hibernate连接到Db2,并且能够读取数据。您认为使用Hibernate和JDBC哪个更好?为什么?请用你的专业知识帮助我。

Updated:应用程序将每天从两个数据库检索数据,并将其保存在SQL Server中。你认为网络服务是最好的方法吗?

你说Hibernate,我就说Hibernate之上的JPA。如果我弄错了,那么请随意将Hibernate概念映射到JPA概念之上。

在最基本的形式中,您将需要来自三个独立的EntityManagerFactories的三个entitymanager。每个EMF都与每个数据库各自的Persistence Unit相关联。

那么您需要从一个EM加载实体,将对象映射到目标EM中的实体,然后持久化该实体。

EntityMangerFactory oracleEmf = getOracleEntityMangerFactory();
EntityMangerFactory db2Emf = getdb2EntityMangerFactory();
EntityMangerFactory sqlEmf = getSqlServerEntityMangerFactory();
EntityManager oracleEm = oracleEmf.createEntityManager();
EntityManager db2Em = db2Emf.createEntityManager();
EntityManager sqlEm = sqlEmf.createEntityManager();
OracleEntity oe = oracleEm.find(OracleEntity.class, oracleEntityPrimaryKey);
DB2Entity db2e = db2Em.find(DB2Entity.class, db2EntityPrimaryKey);
SQLServerEntity soe = new SQLServerEntity(oe);
SQLServerEntity sdb2e = new SQLServerEntity(db2e);
sqlEm.persist(soe);
sqlEm.persist(sdb2e);

这就是要点。

现在,如果你实际上有两个系统通用的实体,你可能会共享相同的类(即在多个持久化单元中拥有相同的类)。但我还没有尝试持久化从一个EntityManager管理到另一个实体。然而,非托管实体应该工作得很好。

ORM是否合适实际上取决于从一个数据库到另一个数据库的转换的复杂性,以及事务的复杂性。

如果你只是将原始表从一个数据库转储到另一个数据库,那么我只使用JDBC和批量INSERT语句到目标数据库。

但是在迁移过程中可能会有相当多的复杂性,这使得使用ORM的工作更容易。

ORM的目的是稍微抽象出关系数据,以便您可以在面向对象的环境中更轻松地工作。
另一方面,您的目标是将数据从一个关系数据库迁移到另一个关系数据库。没有理由使用ORM。这甚至会适得其反。
现在,这并不意味着您应该使用JDBC(尽管它是一个更好的替代方案)。为什么不直接创建两个数据库的内容转储,并将它们导入另一个数据库呢?