【问题标题】:Is correct way to define the JPQL with same alias name?定义具有相同别名的 JPQL 的正确方法是什么?
【发布时间】:2014-07-01 09:08:24
【问题描述】:

我使用 eclipse 链接 jpa 作为我的 ORM。我正在根据传递的输入创建查询。动态 where 子句生成。一切都很好,直到我需要编写子查询。

举例

select emp from Employee emp where emp.empId IN ( select emp.dept from Employee emp)

如果您观察我上面的 JPQL 查询,我为表对象提供了相同的别名“emp”。它会引起任何问题吗?我可以毫无问题地运行查询。

我可以简单地说 emp1 和 emp2。定义具有相同别名的 JPQL 的正确方法是什么?

更新

我已经尝试了两种方式,一个具有相同别名的 JPQL 查询和另一个具有不同名称的查询。两者都工作正常。如果您想对查询进行更多控制,我建议您使用不同的别名。

【问题讨论】:

  • 那不是 SQL 查询,它是 JPQL。也许用你的实际意思来澄清你的问题......
  • 这不是原生(即 SQL)查询。这是JPQL。不知道您所说的“将来会造成任何问题”是什么意思...
  • 对不起,它是 JPQL。我将其用作 entityManager.createQuery() 的一部分;因为我使用的是相同的 tableObject(这里是 emp),所以这个 emp 是否会导致任何问题。因为创造不在我们的控制范围内。
  • 定义具有相同别名的 JPQL 是否正确?这是我应该问的。

标签: hibernate jpa


【解决方案1】:

您不能在 SQL 或 JPQL 中从子查询中引用父查询,它们是完全隔离的。所以我看不出你在做什么有任何问题。你试过了吗?

话虽如此,您的查询没有意义。您正在检查员工 ID 是否在部门列表中。我建议这是您遇到的问题。

【讨论】:

  • 谢谢。它只是 JPQL 示例。在实际场景中,它可以正常工作。
【解决方案2】:

我已经尝试了两种方法,一个具有相同别名的 JPQL 查询和另一个具有不同名称的查询。两者都工作正常。如果您想对查询进行更多控制,我建议您使用不同的别名。因为我正在根据传递的输入创建动态 where 子句。

【讨论】:

    猜你喜欢
    • 2018-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多