69. 댓글 목록 뿌리기
by 볼빵빵오춘기DB - 댓글 데이터 넣기
댓글 리스트 목록을 보기위한 데이터를 먼저 넣는다.
ReplayRepository
public interface ReplyRepository extends JpaRepository<Reply,Integer> { }
BoardService
글 상세보기 시 해당글에 댓글도 같이 들고 와야한다.
하지만 BoardEntity를 보면 reply가 db에는 없지만 들고 오는것을 확인 가능하므로 따로 코드를 추가 할 필요없다.
detail.jsp
forEach를 사용하여 댓글리스트 출력한다.
<div class="card"> <div class="card-header">댓글 리스트</div> <ul id="reply-box" class="list-group"> <c:forEach var="reply" items="${board.replys}"> <li id="reply-${reply.id}" class="list-group-item d-flex justify-content-between"> <div>${reply.content}</div> <div class="d-flex"> <div class="font-italic">작성자: ${reply.user.username}</div> <button onClick="index.replyDelete(${board.id},${reply.id})" class="badge">삭제</button> </div> </li> </c:forEach> </ul> </div>
여기서 문제점
Board - User, Reply // Reply - User, Board
서로 연관관계를 갖고있다.
지금은 문제가 없지만 무한참조를 갖고있기 때문에 데이터를 계속 가져올 수 있다.
(아래와 같이 작성하였을 때 무한참조로 페이지에 데이터를 끝없이 가져온다.)
why? 19번라인에서 jackson 라이브러리 ( 오브젝트를 json으로 리턴) ⇒ 모델의 getter를 호출
즉, board에서 reply를 호출하였는데 그 reply가 다시 board를 리턴한다.

Board
@JsonIgnoreProperties({"board"}) 을 넣어줌으로써 borad에서 reply를 호출하고 그 reply가 다시 board를 호출할 때 그 board가 reply를 다시 호출하지 않게만든다.
@OrderBy("id desc") @JsonIgnoreProperties({"board"}) @OneToMany(mappedBy = "board",fetch = FetchType.EAGER,cascade = CascadeType.REMOVE) // mappedBy 연관관계의 주인이 아니다. private List<Reply> replys;

블로그의 정보
Hello 춘기's world
볼빵빵오춘기활동하기
Hello 춘기's world볼빵빵오춘기 님의 블로그입니다.