如何定义来自不同数据源的实体之间的关系?
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 中,也许还有其他......无论如何,非常感谢。以上是关于如何定义来自不同数据源的实体之间的关系?的主要内容,如果未能解决你的问题,请参考以下文章