是否可以在JPA中进行跨数据库表连接?
我在一个数据库中有一个users
表,它在一个单独的数据库中有一个organizations
表的外键。两个数据库都在同一台物理计算机上。现在MySQL允许我编写跨越多个数据库的查询,但我不确定如何使用JPA。
Java POJO上的@Entity
注释不带数据库的名称,因此无法标记跨数据库关系。
这种情况有解决方法吗?也许使用本机查询来加载已连接的实体?
答案 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