表设计如下
sql 很好写(使用的是 postgresql):
select c.id,c.username
from client_customer c
inner join client_custom_and_label cl on c.id= cl.custom_id
inner join client_label l on cl.label_id=l.id
group by c.id
having array_agg(l.id) @> array[65,67]
但是 jpa 里面:
@Query(nativeQuery = true,value = "select c.id,c.username\n" +
"from client_customer c\n" +
"inner join client_custom_and_label cl on c.id= cl.custom_id\n" +
"inner join client_label l on cl.label_id=l.id\n" +
"group by c.id\n" +
"having array_agg(l.id) @> array[:list]")
List<Map<String,Object[]>> findByLabelId(@Param("list") List<Integer> list);
当 list 的 size 等于 1 的时候非常好写,但是大于 1 的时候自动加了括号 array[(?, ?, ?)]:
Hibernate: select c.id,c.username
from client_customer c
inner join client_custom_and_label cl on c.id= cl.custom_id
inner join client_label l on cl.label_id=l.id
group by c.id
having array_agg(l.id) @> array[(?, ?, ?)]
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.