如何在 Java 中跨多个不同的 SQL 数据库创建 ORM?

Posted

技术标签:

【中文标题】如何在 Java 中跨多个不同的 SQL 数据库创建 ORM?【英文标题】:How to create ORM across multiple different SQL Databases in Java? 【发布时间】:2016-07-22 21:58:44 【问题描述】:

是否有任何基于 Java 的开源技术允许我创建 对象-关系映射,其中底层数据分布在不同的 SQL 数据库不同的服务器。

重要提示:读取写入操作应该是可能的。

我查看了hibernate,但找不到任何信息是否可能出现这种情况。

示例

关系数据

DatabaseA.Persons               DatabaseB.ContactDetails
+-------+-------------------+   +----------+-------------------+
| Name  |       Email       |   |  Phone   |       Email       |
+-------+-------------------+   +----------+-------------------+
| John  | john@example.org  |   | 555-0100 | john@example.org  |
| Jenny | jenny@example.org |   | 555-0200 | jenny@example.org |
+-------+-------------------+   +----------+-------------------+

对象-关系映射

Class: Persons                   Class: ContactDetails
 + Field: Name                    + Field: Phone
 + Field: Email                   + Field: Email
 + Field: ContactDetails           

 ContactDetailsRelation: Persons.Email -> ContactDetails.Email

虚构用法

myCustomer.getName()
myCustomer.getEMail()
myCustomer.getContactDetails().getEMail()
myCustomer.getContactDetails().getPhone()

myCustomer.setName("Max")
myCustomer.setEMail("max@example.org")
myCustomer.getContactDetails().setEMail("max@example.org")
myCustomer.getContactDetails().getPhone("555-0300")

myCustomer.setContactDetails(myOtherContactDetails)

【问题讨论】:

在休眠中是可能的 在几乎所有的 ORM 中都有可能...... JPA API、JDO API 以及它们的实现! 经过一番研究,我发现我要解决的问题似乎被称为“垂直分区”......我能找到的唯一框架可能有用是带有“CompositePersistenceUnits”或带有“@PinnedPartitioning”注释的 EclipseLink ......遗憾的是,没有太多文档。 ..我找不到使用 JPA 的方法...我错过了什么吗? 【参考方案1】:
    **This is exactly what you do.**

 1. You need two hibernate configuration files. You'll need to call them hibernate_sql.cfg.xml and hiberante_oracle.cfg.xml or something like that to differentiate them.
 2. when you initialized your Configuration object, you specifiy the name of the config files. So, you'll have two Configuration objects, from which you'll get two SessionFactory objects.
 3. There you provide the appropriate database connecton config, the dialect to use and which hbm or annotation mapping files for the Entity classes are needed and so on.
 4. within in code you create a single SessionFactory for each database.



    SessionFactory oracleSF = Configuration.configure("hibernate_sql.cfg.xml").buildSessionFfactory();

    SessionFactory msSF = Conf..configure("hiberante_oracle.cfg.xml").build....

【讨论】:

谢谢,但我看不出这将如何帮助我建立从一个 SessionFactory 中的实体到另一个 SessionFactory 中的实体的关系。我发现带有 CompositePersistenceUnits 或 @PinnedPartitioning 的 EclipseLink 可以解决问题。我错过了什么吗? 很难想象两个 PU(会话等)上的真实 JPA 解决方案。我看到了一种可能的选择:松散耦合,实际上是几乎独立的部分(例如旧架构系统中的簿记/crm)

以上是关于如何在 Java 中跨多个不同的 SQL 数据库创建 ORM?的主要内容,如果未能解决你的问题,请参考以下文章

sql数据库中跨不同数据库服务器的查询

如何在 ASP.NET 中跨多个 Web 应用程序维护相同的会话 ID

如何在代码点火器模型中跨多个函数实现数据库锁定?

如何在一个 EmbeddedDatabaseBuilder 中组合多个具有不同分隔符的 SQL 文件?

如何在 R 中跨多个字段创建简单的交叉表

如何在 PySpark 中跨多个时间间隔使用 .filter() 操作?