본문 바로가기
웹개발/SpringBoot

Comment 엔티티와 리파지터리 만들기

by 철없는민물장어 2023. 3. 11.
728x90
반응형

Article과 Comment 관계는 일대다 관계(One-to-many)이다.

(하나의 글에 여러개의 댓글이 있으니)

 

이러한 데이터는 DB에 어떻게 저장될까?

 

댓글의 경우,

[자신의 id/댓글내용/닉네임/글id] 등으로 저장될 것이다.

이 때, 글id를 저장함으로써 어떤 글의 댓글인지 알 수 있다.

데이터 자신을 대표하는 id는 PK(Primary Key)라고하고, 대상을 가리키는 id는 FK(foreign key)라고 한다.

여기서는 자신의id가 PK, 글 id가 FK가 되는것이다.

 

댓글을 위한 리파지터리는 JpaRepository를 상속받아 사용할건데,

기존에 ArticleRepository를 위해 상속받았던 CrudRepository에 추가적으로 일정 페이지의 데이터 조회, 정렬 등의 기능을 쓸 수 있다.

 

 


 

우선, Comment 엔티티를 만들어줬다.

@Entity 어노테이션을 붙여줘야한다.

 

Id는 자동생성되게 @GeneratedValue 어노테이션을 사용했다.

 

댓글의 부모 게시물을 가리키도록

private Article article 필드를 만들었는데,

다대일관계이므로 @ManyToOne 어노테이션을 사용,

article을 Article의 기본키(PK)로 매핑하고 컬럼을 article_id로 사용하기위해 @JoinColumn 어노테이션을 사용했다.

 

Comment 리파지터리를 만든다.

JpaRepository를 상속받았다.

 

findByArticleId메소드를 작성하는데,

sql을 직접 작성하는 방법(네이티브 쿼리메소드)

1. 어노테이션으로 작성하기 @Query

2. xml을 이용

<?xml version="1.0" encoding="UTF-8"?>
<entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm"
                 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                 xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm
                  http://java.sun.com/xml/ns/persistence/orm_2_0.xsd"
                 version="2.0">

    <named-native-query
            name="findCustomerById"
            result-class="com.example.firstproject.entity.Comment" >
        <query>
            SELECT
                *
            FROM
                comment
            WHERE
                nickname=:nickname
        </query>

    </named-native-query>

</entity-mappings>

xml파일은 resources/META-INF/ 내에 있어야 함.

728x90
반응형

'웹개발 > SpringBoot' 카테고리의 다른 글

자바스크립트 fetch로 REST API 호출하기 (댓글등록)  (0) 2023.03.13
댓글 REST API 완성하기  (0) 2023.03.13
테스트코드 작성하기  (0) 2023.03.11
Service와 Transaction  (0) 2023.03.11
Rest API  (0) 2023.03.11

댓글