필드와 칼럼 매핑

요구사항

  1. 회원은 일반 회원과 관리자로 구분해야한다. Java : enum 타입 DB : @Enumerated

  2. 회원가입일과 수정일이 있어야한다. Java : Date 타입 DB : @Temporal

  3. 회원을 설명할 수 있는 필드가 있어야한다. 이 필드는길이 제한이 없다. Java : String 타입 DB : @Lob(String인 경우는 clob)

애노테이션

설명

@Column

컬럼 매핑

@Temporal

날짜 타입 매핑

@Enumerated

enum 타입 매핑

@Lob

BLOB, CLOB 매핑

@Transient

특정 필드를 칼럼에 매핑하지 않을 때(매핑 무시)

주로 메모리상에서만 임시로 어떤 값을 보관하고 싶을 때

ex)@Transient private int tmp;

  1. @Column

nullable = false : not null 제약 조건(자주 쓰임) unique = true : 유일무이한 이름이 할당되는데 랜덤으로 이름이 정해지므로 실제 사용하기 어렵다. precision, scale(DDL) : 아주 큰 숫자(BigDecimal 타입 또는 BigInteger)나 소숫점에 사용한다.

2. @Enumerated

  • ORDINAL(기본값) : 사용❌

  • STRING

3. @Temporal

  • LocalDate 타입 : 년,월. DB에서 date타입

  • LocalDateTime 타입 : 년,월,일. DB에서 timestamp 타입 ex) TemporalType.DATE : 날짜. DB의 date 타입과 매핑. 2013-10-11 TemporalType.TIME : 시간. DB time 타입과 매핑. 11:11:11 TemeporalType.TIMESTAMP : 날짜&시간. DB Timestamp 타입과 매핑. 2013-10-11 11:11:11

4. @Lob

VarChar를 넘어서 더 큰 것을 쓰고 싶을 때. @Lob에는 지정할 수 있는 속성이 없다. 매핑하는 필드 타입이 문자면 CLOB 매핑, 나머지는 BLOB 매핑

  • CLOB: String, char[], java.sql.CLOB

  • BLOB: byte[], java.sql. BLOB

package hellojpa;

import jdk.nashorn.internal.objects.annotations.Getter;
import jdk.nashorn.internal.objects.annotations.Setter;

import javax.persistence.*;
import java.util.Date;

@Entity//JPA가 로딩될 때 엔티티로 인식한다!
@Getter @Setter
//@Table(uniqueConstraints = )
public class Member {

    @Id//PK
    private Long id;
    @Column(name = "name",nullable = false)
    private String username;
    private Integer age;

    //DB에 자바의 enum을 쓰고 싶다면 @Enumerated를 쓰면 된다!
    @Enumerated(EnumType.STRING)
    private RoleType roleType;

    //Date 타입 = 날짜, 시간, 타임스탬프(날짜+시간)
    @Temporal(TemporalType.TIMESTAMP)
    private Date createdDate;
    @Temporal(TemporalType.TIMESTAMP)
    private Date lastModifiedDate;

    @Lob//VARCHAR를 넘어서는 큰 것을 쓰고 싶을 때 사용, String이면 DB에서 clob으로 타입 생성!
    private String description;
    //JPA는 리플렉션해야해서 동적으로 객체 생성해야하기 때문에 기본 생성자 있어야 한다!
    public Member() {
    }

}

Last updated