JPA Criteria:包含许多列的子句

时间:2016-05-12 14:58:17

标签: jpa criteria-api in-clause

我正在尝试使用JPA Criteria API编写以下SQL查询

SELECT * FROM Table1 a
WHERE (a.category, a.priority) IN (
SELECT a1.category, max(a1.priority) FROM Table1 a1 GROUP BY a1.category
)

在功能上,查询选择Table1的元素,每个类别的优先级最高。

categoryPriority = // defines the pair category/priority
mySubQuery = // defines the subquery
query.where(categoryPriority.in(mySubQuery)

这是我正在寻找的示意图。

定义子查询不是问题,因为它有详细记录。

但是我找不到定义这对夫妇的方法(a.category,a.priority)。

2 个答案:

答案 0 :(得分:5)

JPA中未提供IN子句中的多个列。我想你需要使用本机查询。

参考:query for select which multiple values in the “IN” clause

答案 1 :(得分:1)

另一种方法是使用字段连接

创建一个方法,返回要在DTO / Entity中搜索的两个字段。

UIVisualEffectView

您可以连接两个字段并进行搜索。

  public String getField1Field2Concatenated() {
    return field1+ field2;
  }


List<String> ids = list.stream().map(r -> r.getField1Field2Concatenated()).collect(Collectors.toList());

如果任何字段不是文字,则可以投射

Select e from Entity e where concat(e.field1,  c.field2) in (:ids)