Hello

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>&nbsp;
                    <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

볼빵빵오춘기

활동하기