JPQL where子句,集合中包含集合

时间:2017-09-03 20:39:10

标签: java sql spring hibernate jpql

我使用spring数据......我有一个具有ManyToMany关系的实体。

所以我想做这样的要求:

?2

其中categories对应列表,Data也是@Query("SELECT r FROM Data r WHERE (?3 = 0L OR ?3 = (SELECT COUNT(cate.id) FROM Data r2 JOIN r2.categories cate WHERE r.id = r2.id AND cate IN ?2 ))") 的列表(另一个实体)。

但这不起作用......任何想法? :)

PS:我看到了一个解决方案:

using fn_t = int(int);
fn_t ary[2]; // ERROR (ref: ISO/IEC-14882 [dcl.array])

但这是一个由hibernate产生的糟糕请求,并不是我想要的......

3 个答案:

答案 0 :(得分:0)

您应该使用两个查询。您在参数为空时使用的一个用于检索所有数据,而另一个用于非空时用于检索已过滤的数据。

答案 1 :(得分:0)

我认为你应该更好地分解复杂性。 有一个java帮助:) containtAll()方法没有帮助你?

P.S:Hibernate是否理解(?2) IS NULL并且适合您?

答案 2 :(得分:0)

看看是否有效

@Query("SELECT DISTINCT(d) FROM Data d JOIN d.categories c 
WHERE (COALESCE(?2, NULL) IS NULL OR c.id IN (?2))")
  1. 这里我假设id是类别表中的主键字段。您可以根据自己的情况进行修改。
  2. 您将在此处传递类别ID列表作为参数。
  3. 上面的查询将从Data表中检索所有记录,如果?2为null,则它将根据您将传递的类别ID列表进行过滤?2。