웹 개발/Spring Boot

[김영한_자바 ORM 표준 JPA 프로그래밍 - 기본편] 3. 엔티티 매핑(1)

shj718 2022. 6. 8. 21:57

@Entity

- 클래스에 @Entity 를 붙이면 JPA가 관리한다. 매핑할 테이블 이름이 다를 경우 @Table의 name 속성으로 설정이 가능하다.

- ⭐@Entity 클래스는 반드시 기본생성자가 있어야 한다.

@Entity
@Table(name = "User")
public class Member {

    @Id
    private Long id;
    private String name;

    // JPA 는 기본 생성자가 필수.
    public Member() {

    }
}

 

DB 스키마 자동 생성 기능

persistence.xml에 아래 코드를 추가하면, DB 스키마가 자동으로 생성된다.

 

예를 들어, 위와 같이 @Entity가 붙은 Member 클래스가 있으면, 애플리케이션 실행 시점에 'drop table Member if exists' 쿼리문이 날려지고 'create table Member ~' 쿼리문이 날려진다. 즉, DB에 Member 테이블을 JPA를 통해 만들 수 있다.

단, 이 기능은 개발 장비에서만 사용해야 한다. (운영 서버는 절대 X)

 

value = "[옵션]" 의 옵션을 변경할 수 있다.

예를 들어, update 옵션을 쓰면, Member 클래스에 새로운 필드를 추가했을 때 'alter table ~' 쿼리문이 날려져서 칼럼이 추가된다. 하지만 칼럼 삭제는 불가능하다.

 

(+ 내 인텔리제이에서는 update 적용이 안되길래 찾아보니 (참고: https://www.inflearn.com/questions/429626) H2 버전 문제였다.)

<property name="hibernate.hbm2ddl.auto" value="create" />

 

필드와 컬럼 매핑

@Column : 컬럼 매핑

이 어노테이션의 다양한 속성들은 강의 자료를 참고하자.

@Column(name = "name", nullable = false)
private String username;

 

@Temporal : 날짜 타입 매핑 (TemporalType 지정 가능)

@Temporal(TemporalType.TIMESTAMP)
private Date createdDate;

→ 최근에는 아래와 같이 LocalDate, LocalDateTime을 사용해서 생략 가능하다.

private LocalDateTime createdDateTime;

 

@Enumerated : enum 타입 매핑 (Ex. enum 타입으로 전체회원을 관리자/일반회원 으로 구분하는 경우)

EnumType.ORDINAL은 enum 순서(0, 1, 2, ···)를 저장하고,  EnumType.STRING은 enum 이름(USER, ADMIN, ···)을 저장한다.

⭐주의: 디폴트는 EnumType.ORDINAL인데 사용하지 말 것! (이후에 enum 타입에 값 추가/삭제시 혼선 발생)

@Enumerated(EnumType.STRING)
private RoleType roleType; // EnumType.STRING 필수!
public enum RoleType {
    USER, ADMIN
}

 

@Lob : BLOB, CLOB (대형 데이터 저장)

 

@Transient : 특정 필드를 컬럼에 매핑하지 않음 (매핑 무시)