Spring + Boot

Spring data JPA - 기초 1 (@Entity? @Table? 그게 뭐야?)

devRachel 2021. 4. 6. 23:54

entity라는 패키지를 만든 뒤, Memo라는 클래스를 다음과 같이 정의해줍니다.

package entity;

import lombok.ToString;

import javax.persistence.Entity;
import javax.persistence.*;
@Entity
@Table(name= "tbl_memo")
@ToString
public class Memo {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long mno;
}


@Entity

엔티티 클래스는 Spring Data JPA에서 @Entity 라는 어노테이션을 추가하여 사용합니다. 이 어노테이션을 추가한 해당 클래스가 엔티티를 위한 클래스이고, 해당 클래스의 인스턴스들이 JPA로 관리되는 엔티티 객체라는 것을 의미합니다.

 

@Table

@Entity 어노테이션과 같이 사용할 수 있는 어노테이션으로 데이터베이스 상에서 엔티티 클래스를 어떠한 테이블로 생성할 것인지에 대한 정보를 담기 위한 어노테이션입니다. @Table(name="t_member")와 같이 지정하는 경우에는 생성되는 테이블의 이름이 t_member로 생성됩니다. 테이블 이름 외에도 인덱스 생성 설정도 가능한,,!

 

@Id와 @GeneratedValue

@Entity가 붙은 클래스는 Primary Key에 해당하는 특정 필드를 @Id로 지정해야 됩니다. @Id가 사용자가 입력하는 값을 사용하는 경우가 아니라면 자동으로 생성되는 번호(시퀀스 자동증가 아시죠..?MySQL = auto_increment, 오라클 = Sequence, MS SQL = IDENTITY)를 사용하기 위해서 @GeneratedValue라는 어노테이션을 사용합니다

@GeneratedValue(strategy = GenerationType.IDENTITY) 는 PK를 자동생성할 때 사용합니다. 연결되는 DB가 오라클이면 별도의 번호를 위한 별도의 테이블을 생성하고, MySQL 또는 MariaDB라면 auto_increment를 기본으로 사용해서 새로운 레코드가 기록될 때 마다 다른 번호를 갖도록 처리됩니다.

키 생성 전략

AUTO - JPA 구현체가 생성 방식을 결정

IDENTITY - 사용하는 데이터베이스가 키 생성을 결정

SEQUENCE - 데이터베이스의 sequence를 이용해서 키를 생성 @SequenceGenerator와 함께 사용

TABLE - 키 생성 전용 테이블을 생성해서 키 생성 @TableGenerator와 함께 사용

 

 

추가적인 컬럼이 필요한 경우에도 @Column을 사용합니다. nullable, name, length를 이용해서 다양한 속성을 지정할 수 있습니다. 

 

package entity;

import lombok.*;

import javax.persistence.Entity;
import javax.persistence.*;
@Entity
@Table(name= "tbl_memo")
@ToString
@Getter
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class Memo {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long mno;

    @Column(length = 200, nullable = false)
    private String memoText;
}

 

@Column과 반대로 데이터베이스 테이블에는 컬럼으로 생성되지 않는 필드의 경우 @Transient 어노테이션을 사용합니다. @Column의 기본값을 지정하기 위해서 (columnDefinition = "varchar(255) defalut 'Yes'") 와 같이 사용하기도 합니다.