【问题标题】:how to run native query by joining 2 tables from different database in Spring data jpa?如何通过在 Spring data jpa 中加入来自不同数据库的 2 个表来运行本机查询?
【发布时间】:2019-10-18 03:01:08
【问题描述】:

我正在使用 Spring Boot 1.5.18.RELEASE。

我使用以下link关注了多个数据源:

但是当我在同一台服务器中有数据源时它可以工作。

这是我的情况:

  1. datasource1 在一个服务器上:server1
  2. datasource2 在另一台服务器上:server2
  3. 使用本机查询,我必须通过加入 2 个数据源来获取记录。

在上述情况下,spring boot 应用程序仅尝试检查服务器 1 中的表,结果我得到类似

的 sql 异常
SqlExceptionHelper - SQL Error: 1146, SQLState: 42S02

SqlExceptionHelper - Table 'datasource2.table2' doesn't exist

Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 
'datasource2.table2' doesn't exist

如何解决这个问题?

【问题讨论】:

  • 不幸的是,本机查询只能针对其中一个数据源运行。如该链接所述,每个 EntityManager 都是针对单个数据源创建的 - 这是正常的。要运行跨数据库服务器的单个本机 (SQL) 查询,需要一个允许定义外部或远程表的数据库。其他人可能知道更多,但我不知道 MySQL 中有这个特性。其他一些(例如 Oracle 和 SQL Server)可以做到这一点。
  • 您不能这样做,因为每个实体经理都有自己的会话。
  • 如果表在两个数据库中,您必须使用两个数据源分别检索并在代码中以给出 SQL 连接结果的方式处理它们。
  • 请向我们提供有关您正在使用的数据库的信息。如果是 SqlServer tale a look
  • 也许这可以帮助你:stackoverflow.com/questions/44368186/…

标签: hibernate spring-boot spring-data-jpa multi-database-connections


【解决方案1】:

不,你不能这样做。由于每个 JPARepository 只属于 EntityManager,而实体管理器与单个数据库相关。

【讨论】:

    【解决方案2】:

    如果您的表属于同一台服务器(无论数据库(相同或不同)如何),则可以相互连接。 但是,如果它们属于不同的服务器,则 MySql 支持 FEDERATED Engine 。您可以查看question 了解更多详情。

    【讨论】:

      猜你喜欢
      • 2020-06-16
      • 1970-01-01
      • 2016-09-30
      • 2013-11-23
      • 2011-01-14
      • 2019-06-21
      • 1970-01-01
      • 2012-08-04
      • 1970-01-01
      相关资源
      最近更新 更多