JPA中的跨数据库连接

时间:2011-05-02 10:07:30

标签: mysql database jpa jpa-2.0 cross-database

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

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

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

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

3 个答案:

答案 0 :(得分:4)

你做不到。由于每个实体都绑定到持久性上下文,并且上下文绑定到数据库。

如果数据库是指同一服务器上的模式,则可以执行2项操作

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

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

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

答案 1 :(得分:4)

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

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

@Table(name="organizations", schema="org_schema@org_db")

答案 2 :(得分:2)

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

1)@Table注释中没有架构属性

2)为它们所在的模式为俱乐部创建不同的orm文件。

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

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

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

HTH