JPA 中的跨数据库连接

Abh*_*kar 5 mysql database jpa cross-database jpa-2.0

是否可以在 JPA 中进行跨数据库表连接?

users在一个数据库中有一个表,它有organizations一个单独数据库中表的外键。两个数据库都在同一台物理机器上。现在 MySQL 允许我编写跨越多个数据库的查询,但我不确定如何使用 JPA 来做到这一点。

@Entity对Java POJO的注解,也没有办法,以纪念跨DB关系不采取数据库的名称。

这种情况有解决方法吗?也许使用本机查询来加载加入的实体?

Jam*_*mes 6

如果 MySQL 允许您编写跨数据库查询的 SQL,那么您可以在 JPA 的本机查询中使用此 SQL。

我假设您正在使用某种数据库链接机制?如果是这样,那么您也应该能够映射它。您可以将链接数据库的@Table 上的“模式”设置为链接名称。

IE

@Table(name="organizations", schema="org_schema@org_db")
Run Code Online (Sandbox Code Playgroud)


Aug*_*sto 5

你不能。因为每个实体都绑定到一个持久化上下文,而该上下文绑定到一个数据库。

如果数据库是指同一服务器上的模式,则可以做两件事

  • 在其中一个模式上创建一个视图,指向另一个模式上的表。缺点是您可能需要将实体映射两次(每个模式一次)
  • 使用连接创建一个视图并从那里映射您需要的任何值。缺点是实体将是只读的。

如果两个模式都在不同的数据库上,那么您必须在代码中手动进行连接。

一个问题问你。您提到的“外键”是真正的数据库外键还是逻辑 FK ?


Abh*_*L L 3

我们尝试了以下方法,似乎有效。

1)@Table注解中没有schema属性

2)为实体创建不同的orm文件,这些实体由它们所在的模式组成。

3)在每个orm文件中,您可以添加一个“my_schema”。

4) 在 persistence.xml 中包含各自 PU 中的 orm 文件

5) 如果您希望在测试期间使用不同的数据库,请创建类似的 orm 文件进行测试并相应地更改模式中的值,并将这些 orm 文件包含在单独的 PU 中

华泰