首页 > 解决方案 > 如何将 SQL“select case when in”转换为 JPQL 以获得相同的结果?

问题描述

我的 t_user 表示例数据就像

id   name
1    Hunt
2    James
3    Bob
4    Hero

我使用下面的 SQL 来获得一个布尔结果,它可以正常工作,正如我所期望的那样。

SELECT CASE WHEN :userId IN (SELECT name FROM t_user) THEN TRUE ELSE FALSE END AS exist;

如果 :userId 为“Bob”,则返回以下结果

exist
1

或者如果 :userId 是“Jack”,它会返回这个

exist
0

但是,当我将该 SQL 转换为以下 JPQL 时(其中 User 是表 t_user 的 Java 类映射)

SELECT CASE WHEN :userId IN u.uid THEN TRUE ELSE FALSE END FROM User u;

如果 :userId 是“Bob”,我会得到一个类似 [false, false, true, false] 的结果列表。如果 :userId 为“Jack”,则获取结果列表 [false, false, false, false]。我认为 JPQL 判断 t_user 中的每一行都匹配 :userId 并分别返回结果,但显然这不是我所期望的。我期望一个布尔结果,这就是我使用 IN 子句的原因。

那么,任何人都可以帮助告诉我我应该在这里使用什么正确的 JPQL?太感谢了!

标签: javajpqljpa-2.0

解决方案


推荐阅读