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/ 내에 있어야 함.
'웹개발 > 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 |
댓글