繁体   English   中英

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

[英]How can I read data from two different Databases (DB2 and Oracle) and Persist it into another DB (SQL Server) using Hibernate?

我正在将旧Unix服务器上的应用程序迁移到Linux服务器,以下是我需要考虑的方案。

  1. 需要从DB2读取数据。
  2. 需要从Oracle读取数据。
  3. 需要将上面读取的数据保存到Sql Server中(该数据库消耗了上面两个数据
    每日/每周的数据库)。
  4. 所有这些数据库位于不同的服务器上。

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

更新:应用程序将每天从两个数据库中检索数据,并将其持久存储在SQL Server中。 您认为Web服务将是最好的方法吗?

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

您说的是Hibernate,我将首先在Hibernate上说JPA。 如果我弄错了,请随时将Hibernate概念映射到JPA概念之上。

以最基本的形式,您将需要三个,单独的EntityManagerFactories中的三个EntityManager。 每个EMF都绑定到每个数据库的相应持久性单元。

然后,您需要从一个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更加容易。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM