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;
'강의 따라하기 > blog' 카테고리의 다른 글
71. 댓글 작성시 Dto 사용해보기 (1) | 2024.01.11 |
---|---|
70. 댓글 작성하기 (0) | 2024.01.10 |
68. 댓글 디자인하기 (0) | 2024.01.10 |
67. 카카오 로그인 서비스 구현 완료 (0) | 2024.01.10 |
66. 카카오 로그인 엑세스토큰 받기 (0) | 2024.01.07 |
블로그의 정보
Hello 춘기's world
볼빵빵오춘기