From 1bd3cc98a0d44cc56c3154bd9c9bdffc85e549fc Mon Sep 17 00:00:00 2001 From: chanhk-im Date: Thu, 23 Apr 2026 00:55:42 +0900 Subject: [PATCH] =?UTF-8?q?[CH]=20refactor[#237]:=20Board-User-Like=20n+1?= =?UTF-8?q?=20=EB=AC=B8=EC=A0=9C=20=ED=95=B4=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/handong/cra/crawebbackend/board/domain/Board.java | 3 +++ .../cra/crawebbackend/board/repository/BoardRepository.java | 2 +- .../java/com/handong/cra/crawebbackend/user/domain/User.java | 3 ++- .../com/handong/cra/crawebbackend/user/domain/UserRoleSet.java | 2 +- 4 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/handong/cra/crawebbackend/board/domain/Board.java b/src/main/java/com/handong/cra/crawebbackend/board/domain/Board.java index 240969c..97e19a7 100644 --- a/src/main/java/com/handong/cra/crawebbackend/board/domain/Board.java +++ b/src/main/java/com/handong/cra/crawebbackend/board/domain/Board.java @@ -7,6 +7,7 @@ import com.handong.cra.crawebbackend.user.domain.User; import jakarta.persistence.*; import lombok.*; +import org.hibernate.annotations.BatchSize; import org.hibernate.search.mapper.pojo.mapping.definition.annotation.FullTextField; import org.hibernate.search.mapper.pojo.mapping.definition.annotation.Indexed; @@ -43,9 +44,11 @@ public class Board extends BaseEntity { @Setter private List imageUrls = new ArrayList<>(); + @BatchSize(size = 100) @OneToMany(mappedBy = "board", cascade = CascadeType.ALL, orphanRemoval = true) private List comments; + @BatchSize(size = 100) @ManyToMany(mappedBy = "likedBoards") private List likedUsers = new ArrayList<>(); diff --git a/src/main/java/com/handong/cra/crawebbackend/board/repository/BoardRepository.java b/src/main/java/com/handong/cra/crawebbackend/board/repository/BoardRepository.java index 869f8bd..840a6e8 100644 --- a/src/main/java/com/handong/cra/crawebbackend/board/repository/BoardRepository.java +++ b/src/main/java/com/handong/cra/crawebbackend/board/repository/BoardRepository.java @@ -18,9 +18,9 @@ public interface BoardRepository extends JpaRepository { List findAllByCategoryAndDeletedFalse(Category category); + @Query("SELECT b FROM Board b JOIN FETCH b.user WHERE b.category = :category AND b.deleted = false") Page findAllByCategoryAndDeletedFalse(Category category, Pageable pageable); - @EntityGraph(attributePaths = {"likedUsers"}) Optional findBoardByIdAndDeletedFalse(Long id); List findByCategory(Category category); diff --git a/src/main/java/com/handong/cra/crawebbackend/user/domain/User.java b/src/main/java/com/handong/cra/crawebbackend/user/domain/User.java index 86749b5..c4576ee 100644 --- a/src/main/java/com/handong/cra/crawebbackend/user/domain/User.java +++ b/src/main/java/com/handong/cra/crawebbackend/user/domain/User.java @@ -31,6 +31,7 @@ public class User extends BaseEntity { @Column(name = "github_id", nullable = false) private String githubId; + private UserRoleSet roles; @Column(name = "student_id", unique = true, nullable = false) @@ -46,7 +47,7 @@ public class User extends BaseEntity { @Column(name = "img_url") private String imgUrl; - @ManyToMany(fetch = FetchType.EAGER) + @ManyToMany(fetch = FetchType.LAZY) @JoinTable( name = "likes", joinColumns = @JoinColumn(name = "user_id"), diff --git a/src/main/java/com/handong/cra/crawebbackend/user/domain/UserRoleSet.java b/src/main/java/com/handong/cra/crawebbackend/user/domain/UserRoleSet.java index 1839483..de150b7 100644 --- a/src/main/java/com/handong/cra/crawebbackend/user/domain/UserRoleSet.java +++ b/src/main/java/com/handong/cra/crawebbackend/user/domain/UserRoleSet.java @@ -14,7 +14,7 @@ @Embeddable @NoArgsConstructor(access = AccessLevel.PROTECTED) public class UserRoleSet { - @ElementCollection(fetch = FetchType.EAGER) + @ElementCollection(fetch = FetchType.LAZY) @CollectionTable(name = "roles", joinColumns = @JoinColumn(name = "user_id")) @Enumerated(EnumType.STRING) private Set roles = new HashSet<>();