如何定义来自不同数据源的实体之间的关系?

Posted

技术标签:

【中文标题】如何定义来自不同数据源的实体之间的关系?【英文标题】:How to define relations among entities from different datasources? 【发布时间】:2015-02-04 09:36:01 【问题描述】:

我正在设计一个将使用来自多个数据库的数据的应用程序。我将使用 JPA 来实现持久性,并使用 Spring 作为主要应用程序框架。

我需要处理跨越不同数据源的事务。谷歌搜索了一下,我发现 JtaTransactionManager 可能对实现这一点很有用。

但我还想在属于不同数据源的实体之间创建关系(在应用程序级别)。 这样我就可以像数据层由单个数据库组成一样工作,而不必担心实体“来自”的来源。

JtaTransactionManager 会让我这样做,还是我需要一些额外的 Spring 组件或配置?

【问题讨论】:

【参考方案1】:

我知道没有简单的现有解决方案可以解决您的问题。

JtaTransactionManager 将负责在同一事务中对不同的数据库/数据源执行操作,但您不会得到任何数据库所保证的数据一致性(如数据库之间的外键)。

此外,JPA 不支持不同数据库之间的@ManyTo* 关系(例如EntityFromDb1 具有OneToOne 关系tp EntityFromDb2),因此解决方案是使用相应的ID。之后,您的任务就是管理这些关系。当然,通过您的一些工作,您可以自动化关系的负载,但除此之外还有更多,例如级联、锁定、加入两个数据库的查询......

【讨论】:

我不知道链接服务器是什么(我想它是 SQL Server 功能)。如果是这样,我无法进一步帮助您。 是的,它是 SQL Server 的一个特性,但它也存在于 Oracle DBMS 中,也许还有其他......无论如何,非常感谢。

以上是关于如何定义来自不同数据源的实体之间的关系?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用实体框架关联来自多个上下文的对象

如何定义来自不同来源的表之间的关系?

自定义核心数据映射:在现有关系之间插入新实体

实体框架代码优先关系 - 如何定义两个对象之间的关系:两个实体之间的可选一对一

如何定义Java中的模型和数据库之间的关系?

01数据库的实体关系