[SBB] JPA(Java Persistence API)-entity

김동하·2023년 11월 22일
0
post-custom-banner

목표

Spring Boot에서 JPA 사용하기

환경
Framework : Spring Boot 3.1.5
Build : Gradle 8.4
JDK : JDK21

할것 요약
1. build.gradle에 JPA dependency 추가하기
2. application.yml에 JPA 설정 추가하기
3. JPA Entity 생성
4. JPA Repository 생성
5. JPA CRUD API 만들어보기

1. build.gradle에 JPA dependency 추가하기

dependencies {
    // JPA
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
}

2. application.yml에 JPA 설정 추가하기

spring:
  ## JPA Setting Info
  jpa:
    hibernate:
      ddl-auto: create  # option type: create, create-drop, update, validate, none
    properties:
      hibernate:
        diarect: org.hibernate.dialect.H2Dialect  # 쿼리의 기준이 되는 데이터베이스 엔진을 설정합니다.
        show_sql: true  # sql 쿼리를 보여줍니다.
        format_sql: true  # sql query formatting
        use_sql_comments: true  # sql 쿼리의 추가정보를 보여줍니다.

logging:
  level:
    org:
      hibernate:
        type:
          descriptor:
            sql: trace  # query의 ?에 어떤 값이 들어가는지 추적할 수 있는 설정입니다. TRACE Log에 값을 보여줍니다.
            

3. JPA Entity 생성

엔티티는 데이터베이스 테이블과 매핑되는 자바클래스를 말한다.
질문과 답변에 해당하는 엔티티가 있어야함.

질문엔티티

답변엔티티

Question.java 파일(question 엔티티 생성)

package com.ll.sbmission20231121;

import jakarta.persistence.*;
import lombok.Generated;
import lombok.Getter;
import lombok.Setter;

import java.util.List;

@Getter
@Setter
@Entity
//JPA 가 엔티티로 인식한다.


public class Question {
    @Id
    //데이터 구분을 위함.
    // JPA 에서 엔티티의 기본 키 값을 자동생성하는 방법을 지정하는 어노테이션.
    // 엔터티를 데베에 저장시에 해당 엔터티의 기본 키 값을 자동 생성후 이를 데베의 identity 컬럼에 의존해 할당
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;
    //질문의 고유번호
    @Column(length = 200)
    //컬럼의 길이
    private String subject;
    //질문의 제목

    @Column(columnDefinition = "TEXT")

    //테이블의 열과 매핑 시 정의를 지정하는 어노테이션 . 열의 정의를 "text"로 지정
    //      글자수 제한 두지 않음 .
    private String content;
    //질문의 내용
    private  LockModeType createDate;
    //질문을 작성한 일시

    @OneToMany(mappedBy = "question", cascade = CascadeType.REMOVE)
    private List<Answer> answerList;
}

Answer.java 파일 (answer 엔티티 생성)

package com.ll.sbmission20231121;

import jakarta.persistence.*;
import lombok.Getter;
import lombok.Setter;
import org.hibernate.annotations.ColumnDefault;
import java.time.LocalDateTime;

@Getter
@Setter
@Entity

public class Answer {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;
    //답변의 고유 번호
    @Column(columnDefinition  = "TEXT")
    private String content;
    //답변 내용
    private LocalDateTime createDate;
    //답변 작성 일시
    @ManyToOne
    private Question question;
    //어떤 질문에 대한 답변 인지 알기 위한 질문 속성
}

이해 안된던 것

//sql 대신에 create 테이블 을 만듦
//insert in (1, "제목")
//insert in (2, "제목")
//insert in (3, "제목")

@Id
 //ID 컬럼은 primary key 

 @GeneratedValue(strategy = GenerationType.IDENTITY)
//자동으로 인덱스 값증가해서 붙여주기 위해서 IDENTITY 컬럼 사용.

private Integer id;
 

완성.

post-custom-banner

0개의 댓글