![](/img/trans.png)
[英]Can @Query annotation in Spring Data JPA take in a list of enums?
[英]JPA Query: List of enums IN list of enums
我有一个搜索条件对象,其中包含枚举列表。
搜索结果还包含一个枚举列表。
我希望能够找到包含搜索条件中列出的所有枚举的搜索结果。
我尝试了以下方法,但得到了
IllegalArugmentException参数值[ENUM_VALUE_X]与预期的类型java.util.Collection不匹配(n / a)
我觉得我在某个地方犯了一个愚蠢的错误,但无法弄清楚它是什么。 我究竟做错了什么?
String queryStr = "select distinct result from SearchResult result where
result.enumsList IN :enumsList"
...
Query query = entityManager.createQuery(queryStr, SearchResult.class);
query.setParameter("enumsList", criteria.getEnumsList());
//criteria.getEnumsList() = [ENUM_VALUE_X, ENUM_VALUE_Y]
这是解决这个问题的一种非常丑陋的方法(尽管它可以100%工作):
List<SomeEnum> enumList = criteria.getEnumsList();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < enumList.size(); i++) {
if (i == 0) {
sb.append("WHERE :e").append(i).append(" MEMBER OF result.enumsList");
} else {
sb.append(" AND ").append(":e").append(i).append(" MEMBER OF result.enumsList");
}
}
Query query = em.createQuery("SELECT DISTINCT result FROM SearchResult result "+ sb.toString(), SearchResult.class);
for (int i = 0; i < enumList.size(); i++) {
query.setParameter("e" + i, enumList.get(i));
}
List<SearchResult> resultList = query.getResultList();
这是zyexal的建议,尽管它与一个匹配项匹配并检查列表的长度,但它也可以工作。 因此,分隔符可能是例外的:
Query query = em.createQuery("SELECT DISTINCT result FROM SearchResult result JOIN result.enumsList e WHERE e IN :enums GROUP BY result HAVING COUNT(distinct e) = :enumsSize", SearchResult.class);
query.setParameter("enums", criteria.getEnumsList());
query.setParameter("enumsSize", criteria.getEnumsList().size());
List<SearchResult> resultList = query.getResultList();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.