【发布时间】:2018-08-15 00:15:32
【问题描述】:
如何在 JPQL 中完成类似以下的操作?
SELECT item
FROM Item item
WHERE (
SELECT tag.name, tag.color
FROM Tag tag
WHERE tag.item = item
ORDER BY tag.name, tag.color
) = :tags
其中 :tags 是字符串对的列表(按名称和颜色排序),作为参数传入,通过 .getQuery().setParameter("tags", tags)。
基本的想法是假设我有一组项目,每个项目都有 0+ 个相关的字符串和颜色标签,我希望找到任何具有一组特定名称/颜色标签的项目。
我基本上尝试使用上面显示的内容作为查询,但我得到了模糊的错误The right expression is not a valid expression。子查询似乎有问题。有任何想法吗?我并不关心这个解决方案与我上面的模板有多相似,只要它满足基本思想(并且可以动态指定目标标签集)。
【问题讨论】:
-
我认为您的查询甚至不会在任何版本的实际 SQL 上运行。如果子查询只选择一个列,您可以考虑以某种方式在 JPQL 中执行
WHERE IN子句。但是由于子查询选择了两列,这在 JPQL 中可能不可行。 -
好的,假设我将两列连接成一个字符串。那能做到吗?
标签: java database subquery jpql