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

Java 如何使用Hibernate从两个不同的数据库(DB2和Oracle)读取数据并将其持久化到另一个DB(SQL Server)中?,java,web-services,hibernate,rest,Java,Web Services,Hibernate,Rest,我正在将一个旧的UNIX服务器上的应用程序移植到Linux服务器上,下面是我需要考虑的场景。 需要从DB2读取数据 需要从Oracle读取数据 需要将上述读取的数据保存到Sql Server中(此数据库使用上述两个数据库中的数据 每日/每周的数据库) 所有这些数据库都位于不同的服务器上 我能采取的最好办法是什么?我已经使用Hibernate连接到Db2,并且能够读取数据。您认为使用Hibernate或JDBC哪个更好?为什么?请用你的专业知识帮助我 更新:应用程序将每天从两个数据库检索数据,并应

我正在将一个旧的UNIX服务器上的应用程序移植到Linux服务器上,下面是我需要考虑的场景。
  • 需要从DB2读取数据
  • 需要从Oracle读取数据
  • 需要将上述读取的数据保存到Sql Server中(此数据库使用上述两个数据库中的数据
    每日/每周的数据库)
  • 所有这些数据库都位于不同的服务器上
  • 我能采取的最好办法是什么?我已经使用Hibernate连接到Db2,并且能够读取数据。您认为使用Hibernate或JDBC哪个更好?为什么?请用你的专业知识帮助我


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

    ORM的目的是稍微抽象出关系数据,以便您可以在面向对象的环境中更轻松地工作。
    另一方面,您的目标是将数据从一个关系数据库迁移到另一个关系数据库。没有理由使用ORM。这甚至会适得其反。

    现在,这并不意味着您应该使用JDBC(尽管它是一个更好的选择)。为什么不创建两个数据库内容的转储并将它们导入另一个数据库

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

    在最基本的形式中,您需要来自三个独立的EntityManager工厂的三个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管理的实体持久化到另一个EntityManager。但是,非托管实体应该可以正常工作

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

    如果您只是将原始表从一个数据库转储到另一个数据库,那么我只需要在目标数据库中使用JDBC和batch mass INSERT语句


    但迁移过程可能会相当复杂,这使得使用ORM变得更加容易。

    谢谢您的回复。这里的问题是,这不是一个一次性的过程。应用程序需要同时从(DB2和Oracle)数据库中检索数据。一旦完成整个迁移,DB2将关闭,这将需要3年的时间,但Oracle将保持活动状态。谢谢,我将尝试这种方法,并在这里更新它的运行情况。谢谢。这花了一些时间,但这种方法现在似乎对我有效。谢谢你!