5

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

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

Java POJO 上的@Entity注释不采用数据库的名称,因此无法标记跨数据库关系。

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

4

3 回答 3

6

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

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

IE

@Table(name="organizations", schema="org_schema@org_db")
于 2011-05-02T14:09:13.137 回答
5

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

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

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

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

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

于 2011-05-02T11:25:34.830 回答
3

我们尝试了以下方法,似乎可行。

1) @Table 注释中没有模式属性

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

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

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

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

高温高压

于 2011-09-29T05:46:06.530 回答