从两个不同的数据库中检索相同DTO的信息

Koi*_*oer 16 java spring hibernate jpa spring-data-jpa

我试着通过一个简短的例子尽可能地简化这个.

我们有两个数据库,一个在MSSQLServer中,另一个在进行中.我们有一个用户DTO,因为它显示在Web应用程序的UI表中.

User

int, id
String, name
String, accountNumber
String, street
String, city
String, country
Run Code Online (Sandbox Code Playgroud)

现在,此DTO(实体)不仅存储在一个数据库中,同一用户的某些信息(字段)存储在一个数据库中,一些信息存储在另一个数据库中.

MSsql

Table user
int, id
String, name
String, accountNumber


Table userModel
int, id
String, street
String, city
String, country
Run Code Online (Sandbox Code Playgroud)

正如您所看到的那样,密钥是连接两个数据库中两个表的唯一部分,正如我之前所说的那样,它们不在同一个数据库中而且没有使用相同的数据库供应商.

我们需要为每列排序UI表.显然,我们需要使用来自两个数据库的信息创建用户dto.

我们此时的提议是,如果用户想要使用街道字段应用排序,我们在Progress数据库中运行查询并使用此结果集获取页面(使用分页)并直接转到带有这些键的MSSQLServer User表并运行另一个查询提取丢失的信息并将其保存到我们的DTO并将其传输到UI.使用implies在一个数据库中运行查询,然后根据第二个数据库中返回的键执行其他查询.

数据库的顺序可能会发生变化,具体取决于用户要应用排序的列(字段).

从技术上讲,我们将创建一个充当外观的jparepository,并根据字段在正确的数据库中创建进程.

我的问题是:在这种情况下有一种常用的模式,我们使用spring,所以spring可能有一些开箱即用的功能来支持这个要求,如果可以使用jparepositories(我有由于我们将使用两个不同的实体管理器,每个数据库一个,因此对它有几个疑问.

注意:不能将数据从一个数据库移动到另一个数据库.

Vla*_*cea 3

为此,您需要有单独的DataSource/EntityManagerFactory/JpaRepository.

Spring 框架中没有对此架构的开箱即用的支持,但是您可以轻松地将双对隐藏在服务DataSource层后面。您甚至可以为ACID 操作配置JTA 数据源