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

标签 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(Entity) 不仅仅存储在一个数据库中,同一用户的一些信息(字段)存储在一个数据库中,而一些信息(字段)存储在另一个数据库中。

MSsql

Table user
int, id
String, name
String, accountNumber


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

正如您所见,关键是唯一链接两个数据库中的两个表的部分,正如我之前所说,它们不在同一个数据库中并且不使用相同的数据库供应商。

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

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

数据库的顺序可能会根据用户想要应用排序的列(字段)而改变。

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

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

注意:将数据从一个数据库移动到另一个数据库不是一种选择。

最佳答案

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

在 Spring 框架中没有开箱即用的支持这种架构,但是您可以轻松地将双重 DataSource 对隐藏在服务层后面。你甚至可以配置JTA DataSources对于 ACID operations .

关于java - 从两个不同的数据库中检索相同 DTO 的信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29521822/

相关文章:

java - 尝试显示数据库数据时转换集合时出现问题

SuiteClasses 语法的 Java JUnit 类数组

java - Eclipse Maven Spring 项目 - 错误

hibernate - 如何使用 JPA Criteria Api 使用文字参数调用 db2 数据库函数?

java - 在 Swing 中嵌入浏览器,希望使用 VLC 小程序

java - 在 Linux Mint 中运行 .jar 文件时出现阻止错误

spring - rejectValue消息参数

java - Spring Boot 多个配置文件可以在 IDE 中运行,但不能在命令行中运行

java - Spring 和 hibernate 错误 "Declaring class is not found in the inheritance state hierarchy"

hibernate - org.hibernate.query.Query.list 已弃用