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

时间:2015-04-08 17:50:46

标签: java spring hibernate jpa spring-data-jpa

我尝试用简短的例子尽可能简化。

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

User

int, id
String, name
String, accountNumber
String, street
String, city
String, country

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

MSsql

Table user
int, id
String, name
String, accountNumber


Table userModel
int, id
String, street
String, city
String, country

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

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

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

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

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

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

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

2 个答案:

答案 0 :(得分:3)

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

在Spring框架中对此体系结构有没有现成的支持,但您可以轻松地隐藏Service层后面的双DataSource对。您甚至可以为JTA DataSources配置ACID operations

答案 1 :(得分:1)

我的建议是找到一种方法将2个数据库链接在一起,这样您就可以利用数据库驱动程序功能而不会影响代码。

基本上,如果Progress数据库可以链接到SQL Server,您将能够使用带有连接ID列的单个SQL查询来查询这两个数据库,并且您将获得要显示的应用程序的合并,排序和分页结果集

我不是Progress数据库的专家,但似乎有一个ODBC驱动程序,所以你可能会尝试link it to SQL Server