queryDSL中的组concat SQL查询的等效表达式是什么? 我正在使用spring JPA的queryDSL,它已更新为最新版本,在阅读文档时我无法找到这样的东西。queryDSL中的组concat等价物
谢谢。
queryDSL中的组concat SQL查询的等效表达式是什么? 我正在使用spring JPA的queryDSL,它已更新为最新版本,在阅读文档时我无法找到这样的东西。queryDSL中的组concat等价物
谢谢。
我自己找到了答案。 它可以通过变换函数来完成在queryDSL
从http://www.querydsl.com/static/querydsl/3.4.3/reference/html/ch03s02.html第3.2.4节
Map<Integer, List<Comment>> results = query.from(post, comment)
.where(comment.post.id.eq(post.id))
.transform(groupBy(post.id).as(list(comment)));
因此,举例来说,如果你想通过对2列组,下面的代码将工作:
Map<List<?>, List<Comment>> results = query.from(post, comment)
.where(comment.post.id.eq(post.id))
.transform(groupBy(post.id, post.hooplah).as(list(comment)));
其产生List_of_groupByFieldValues - > List_of_results的映射。
有人可以确认这是否是在queryDSL中执行组concat的标准方法?
我问开发人员添加该功能。这里修复了这个问题。
https://github.com/querydsl/querydsl/commit/23e2471b4735ad50f5ac33ad539474d113bb5b07
,他们甚至提供在提交测试用例,所以这里是一个例子:
@Test
@ExcludeIn(DERBY)
public void groupConcat() {
assertEquals(
ImmutableList.of("Mike,Mary", "Joe,Peter,Steve,Jim", "Jennifer,Helen,Daisy,Barbara"),
query().select(SQLExpressions.groupConcat(employee.firstname))
.from(employee).orderBy(groupConcatOrder())
.groupBy(employee.superiorId).fetch());
}
@Test
@ExcludeIn(DERBY)
public void groupConcat2() {
assertEquals(
ImmutableList.of("Mike-Mary", "Joe-Peter-Steve-Jim", "Jennifer-Helen-Daisy-Barbara"),
query().select(SQLExpressions.groupConcat(employee.firstname, "-"))
.from(employee).orderBy(groupConcatOrder())
.groupBy(employee.superiorId).fetch());
}
private OrderSpecifier<?>[] groupConcatOrder() {
if (Connections.getTarget() == Target.POSTGRESQL) {
return new OrderSpecifier[] {employee.id.asc()};
} else {
return new OrderSpecifier<?>[0];
}
}