【问题标题】:Getting data from multiple tables without foreign keys in JPA 2.0在 JPA 2.0 中从没有外键的多个表中获取数据
【发布时间】:2014-02-16 09:56:59
【问题描述】:

几天来,我一直在关注后续问题,但无法正常工作。这是问题所在。我有四个表(A、B、C、D),它们通过任何类型的外键都没有关联。但是,他们确实有一个名为“superId”的列。

任务是从 A 表中取出所有记录,从其他记录中找到匹配 'superId'(如果存在)的记录,并通过 JPA 的构造函数表达式返回它们。

关于 JOIN。由于表没有关系,我不能做左 JOIN(或任何其他 JOIN)。

我尝试成功使用 MULTISELECT,但它仅在我使用“a.superId = b.superId”进行隐式连接时才有效。这会导致问题,因为这三个表可能没有匹配的记录,这将使查询返回空集。这不会飞。

我没有其他想法,这对我的项目进行至关重要。请原谅我对问题的简单描述 - 从我的手机发送。

【问题讨论】:

  • JOIN 不需要存在外键。
  • 你确定吗?你能用一些参考资料或 JPA 2 的例子来支持它吗?
  • 这是关于 JPA 2 的。我将编辑标题
  • 你不能只用外键约束注释类吗? JPA 是否真的验证它在数据库中的存在?
  • 据我所见,如果我尝试进行常规连接,则该语法在 JPA 中将无效。您能否为此展示一个 SQL 查询示例?我可以使用本机 SQL 查询,但我没有尝试过,因为我不确定它是否会起作用。那会是 3 个左连接吗?

标签: java sql jpa-2.0 postgresql-9.1


【解决方案1】:

在 JPA2 中执行任意查询绝对不需要存在外键关系。

你不能“跟随”父子关系,所以你不能做你平常的parentObject.childObject事情。您必须改为使用 Criteria API 或 HQL 来构建连接。

见:

【讨论】:

    猜你喜欢
    • 2015-04-11
    • 2019-07-17
    • 1970-01-01
    • 2014-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-07
    相关资源
    最近更新 更多