【问题标题】:Do left outer join only if condition satisfies in JPA仅当 JPA 中的条件满足时才执行左外连接
【发布时间】:2021-12-07 19:58:00
【问题描述】:

我是 JPA 的新手,并尝试进行左外连接,前提是本地 JPA 查询中满足条件。

本机查询如下所示。在这里,我想使用 where 条件执行 A left outer join B,前提是应用程序中的给定标志 toJoin 为真:

select a.id, a.name from A left outer join B on A.id = B.aid where b.name="some_name"

我不确定,我将如何在我的 JPA 存储库中容纳上述本机 JPA 查询中的 toJoin 应用程序标志。

编辑

我只是想在CASE WHEN 的帮助下在 mysql 中实现同样的效果,示例条件如下:

select a.id from A a, case when 1=2 then left outer join B b ON a.id = b.aid end limit 2;

但是我遇到了语法错误。

【问题讨论】:

  • 为什么你的条件中不能有两个查询? IF <select ...> else <select ...>
  • @maSTAShuFu 我不确定,我将如何在我的 JPA 存储库中编写 IF 子句。如果可能的话,你能举一个简短的例子吗?谢谢。
  • @maSTAShuFu 我浏览了链接。但截至目前,JPA 存储库中的所有查询都是原生的,其中几个查询我一直在进行更改。到目前为止,还没有使用 Criteria builder。我在想,为了遵循链接中建议的方法,我必须进行大量更改。所以我想知道是否有任何方法可以在本机查询的帮助下实现这一点。
  • 你为什么不做一个内部连接?

标签: java mysql spring-boot jpa spring-data-jpa


【解决方案1】:

您的问题仍然含糊不清,但我怀疑您的努力:

select a.id
from A a, case when 1=2 then left outer join B b on a.id = b.aid end
limit 2

应该是:

select a.id, b.someColumn
from A a
left join B b on a.id = b.aid and 1=2
limit 2

1=2 实际上是一些更复杂的表达式。

【讨论】:

    猜你喜欢
    • 2020-01-10
    • 2018-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-12
    相关资源
    最近更新 更多