Querydsl์ Group by์ ๋ํด ์ฐพ์๋ณด๋ค๊ฐ ์ฐ์ฐ์น ์๊ฒ ๊ธฐ์ตํด๋๋ฉด ์ข์ ์ด์๋ฅผ ์ฐพ์๋ค. ๊ฐ๋จํ๊ฒ ์ ๋ฆฌํด๋ณด์.
์ด๋ฒ ํ๋ก์ ํธ์์ ์ธ์ด๋ณ๋ก ๊ฐ์๋ฅผ ํ์
ํด์ผ ํ๋ค๋ ์๊ตฌ์ฌํญ์ด ์์๋ค.
์ฒ์ ์ง ์ฟผ๋ฆฌ๋ ์๋์ ๊ฐ๋ค.
@Override
public List<ReviewRequestLanguageCount> getReviewRequestLanguageCountGroupByLanguage() {
List<Tuple> result = query.select(reviewRequest.languageName, reviewRequest.id.count())
.from(reviewRequest)
.groupBy(reviewRequest.languageName)
.fetch();
return result.stream().map(
r -> new ReviewRequestLanguageCount(r.get(0, String.class), r.get(1, Long.class))
).collect(Collectors.toList());
}
Group by์ ๋์์ ์ธ์ด์ด๋ฆ(languageName)์ผ๋ก ํด์ค์ผ๋ก ์นด์ดํ
์ ํ ์ ์๊ฒ ๋์๋ค. ๋ฐ์ํ๋ ์ฟผ๋ฆฌ๋ ์์ํ๋ ๋๋ก ๋๊ฐ๋ค.
์ด๋ ๊ฒ ๊ตฌํ์ ๋ง์น๊ณ ํน์๋ ์์ ์ด์๋ฅผ ์ฐพ์๋ณด๊ธฐ ์ํด ๊ตฌ๊ธ๋ง ํ๋๋ฐ ์๋๋ ๋ค๋ฅผ๊น ๊ณ ์๋๋ค์ ์ด์๊ฐ ํ์ด๋์๋ค.
์ฟผ๋ฆฌ์๋ ์๋ฌด๋ฐ ๋ฌธ์ ๊ฐ ์์ง๋ง MySql
์์ Group by
๋ฅผ ์ด์ฉํ๋ค๋ฉด ์๋์ผ๋ก ์ ๋ ฌ์ด ์ํ๋๋ค๊ณ ํ๋ค. ํ์ง๋ง ๊ทธ๋ฃนํ์ ์ ๋ ฌ์ ํ์์๋ค. ์ด ์ธ๋ชจ์๋ ์์
์ ์ ๊ฑฐํด์ผ ํ๋ค.
๋ณดํต์ MySql์์๋ ์์๊ฐ์ ์ด์๋ฅผ order by null
๋ก ํด๊ฒฐํ๋ค๊ณ ํ๋ค.
(๋ช
์์ ์ผ๋ก ์ ๋ ฌ์ ํ์ง ์๊ฒ ๋ค๋ ํ์ ??)
Querydsl์์ ์ง์ ์ ์ผ๋ก order by null
์ ํ์ฉํ์ง๋ ์์ง๋ง OrderSpecifier
๋ฅผ ์ด์ฉํด์ ์ ๋ ฌ๋์์ ์ปค์คํ
ํด์ ๋น์ทํ๊ฒ ์ง์ ๊ตฌํํ ์ ์๋ค.
jojoldu ๋์ ์ฝ๋๋ฅผ ๊ทธ๋๋ก ์ฌ์ฉํ๋ค.
public class OrderByNull extends OrderSpecifier {
public static final OrderByNull DEFAULT = new OrderByNull();
private OrderByNull() {
super(Order.ASC, NullExpression.DEFAULT, NullHandling.Default);
}
}
์ด๋ ๊ฒ Null(NullExpression.DEFAULT
)์ ์ ๋ ฌํ๋ ์ ๋ ฌ์ Group by๋ฅผ ์ํํ๋ ๊ณณ์ ์ ์ฉ์ํค๋ฉด ๋๋ค.
@Override
public List<ReviewRequestLanguageCount> getReviewRequestLanguageCountGroupByLanguage() {
List<Tuple> result = query.select(reviewRequest.languageName, reviewRequest.id.count())
.from(reviewRequest)
.groupBy(reviewRequest.languageName)
// ์ ์ฉ
.orderBy(OrderByNull.DEFAULT)
.fetch();
return result.stream().map(
r -> new ReviewRequestLanguageCount(r.get(0, String.class), r.get(1, Long.class))
).collect(Collectors.toList());
}
์ฟผ๋ฆฌ์ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ฉด order by null asc
๊ฐ ๋๊ฐ ๊ฒ์ ํ์ธํ ์ ์๋ค.
Querydsl Group by ์ต์ ํ
https://jojoldu.tistory.com/477