JPA

[JPA] 28. 댓글 쓰기 및 삭제 및 인터셉터 적용

Song hyun 2024. 10. 17. 10:28
728x90
반응형

[JPA] 28. 댓글 쓰기 및 삭제 및 인터셉터 적용

 

*정방향 인서트: JPA에서 엔티티간의 연관 관계를 설정할 때, 연관 관계의 주인(owner) 엔티티를 통해 데이터를 저장하는 것을 의미한다. 이는 양방향 매핑에서 특히 중요하며, 연관 관계의 주인 측에서 데이터를 추가하고, 저장해야 연관관계가 올바르게 매핑된다.

 

 

1. 댓글 등록 화면 코드 수정

    <!-- 댓글 -->
    <div class="card mt-3">
        <!-- 댓글등록 -->
        <div class="card-body">
            <form action="/reply/save" method="post">
                <input type="hidden" name="boardId" value="{{board.id}}">
                <textarea class="form-control" rows="2" name="comment"></textarea>
                <div class="d-flex justify-content-end">
                    <button type="submit" class="btn btn-outline-primary mt-1">댓글등록</button>
                </div>
            </form>
        </div>

 

2. ReplyDTO.java

package com.tenco.blog_v2.reply;

import com.tenco.blog_v2.board.Board;
import com.tenco.blog_v2.user.User;

public class ReplyDTO {

    public static class SaveDTO {
        private Integer boardId;
        private String comment;

        // DTO --> JPA 영속성 컨텍스트로 저장 한다.. 엔티티로 변환 해야 한다.
        public Reply toEntity(User sessionUser, Board board) {
            return Reply.builder()
                    .comment(comment)
                    .board(board)
                    .user(sessionUser)
                    .build();
        }

    }
}

 

3. ReplyJPARepository

package com.tenco.blog_v2.reply;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;

import java.util.List;

// 어노테이션 생략 가능 -> IoC 처리 됨
public interface ReplyJPARepository extends JpaRepository<Reply, Integer> {
    // 기본적인 주요 메서드 제공 받음 (구현체를 만들어 준다)

    // 1. 커스텀 쿼리를 만들어 본다. 어노테이션 사용
    // boardId 를 통해서 리플정보를 조회하는 기능
    @Query("select r from Reply r where r.board.id = :boardId")
    List<Reply> findByBoardId(@Param("boardId") Integer boardId); // 알아서 메서드의 바디를 만들어 준다.
    
}
728x90
반응형