From 1d3b0a113b4de99fba37a20defd73655fd8a7d95 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=82=98=EC=9A=A9=EC=A4=80?= Date: Mon, 2 Feb 2026 01:20:46 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20=EC=BF=BC=EB=A6=AC=20=EC=88=98=EC=A0=95?= =?UTF-8?q?=20(#313)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> --- .../cloth/repository/ClothRepositoryImpl.java | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/clokey-api/src/main/java/org/clokey/domain/cloth/repository/ClothRepositoryImpl.java b/clokey-api/src/main/java/org/clokey/domain/cloth/repository/ClothRepositoryImpl.java index 6b7241b7..288b1bc5 100644 --- a/clokey-api/src/main/java/org/clokey/domain/cloth/repository/ClothRepositoryImpl.java +++ b/clokey-api/src/main/java/org/clokey/domain/cloth/repository/ClothRepositoryImpl.java @@ -40,17 +40,24 @@ public Slice findAllMemberRecommendClothesByCategory // 우선 순위에 맞게 페이징 합니다. // - Category는 고정입니다. // - 계절은 요청한 계절에 가까운 순서대로 페이징을 진행합니다. + // @ElementCollection에서는 exists 서브쿼리가 더 안정적입니다. + BooleanExpression seasonCondition = + cloth.seasons + .contains(season) + .or(cloth.seasons.contains(nextSeason)) + .or(cloth.seasons.contains(previousSeason)) + .or(cloth.seasons.contains(oppositeSeason)); + NumberExpression seasonPriority = new CaseBuilder() - .when(cloth.seasons.any().in(List.of(season))) + .when(cloth.seasons.contains(season)) .then(1) .when( cloth.seasons - .any() - .in(List.of(nextSeason)) - .or(cloth.seasons.any().in(List.of(previousSeason)))) + .contains(nextSeason) + .or(cloth.seasons.contains(previousSeason))) .then(2) - .when(cloth.seasons.any().in(List.of(oppositeSeason))) + .when(cloth.seasons.contains(oppositeSeason)) .then(3) .otherwise(4); @@ -60,7 +67,7 @@ public Slice findAllMemberRecommendClothesByCategory .where( cloth.category.id.eq(categoryId), cloth.member.id.eq(memberId), - cloth.seasons.any().in(targetSeasons)) + seasonCondition) .orderBy(seasonPriority.asc(), cloth.id.asc()) .fetch();