我使用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产生的糟糕请求,并不是我想要的......
答案 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))")
上面的查询将从Data表中检索所有记录,如果?2为null,则它将根据您将传递的类别ID列表进行过滤?2。