JPA

JPA시작(4)_다양한 매핑 사용 @Enumerated, @Temporal, @Lob, @Column, @UniqueConstraint

개발자 배찌 2021. 6. 7. 15:03
728x90

회원관리 프로그램에 요구사항을 추가해보자.

  • 회원은 일반 회원과 관리자로 구분해야함
  • 회원가입일과 수정일이 있어야함
  • 회원을 설명할 수 있는 필드가 있어야함. 길이제한 없음
  • 회원이름은 필수로 입력, 10자를 초과하면 안된다
package jpabook.start;

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

@Entity
@Table(name="MEMBER", uniqueConstraints = {@UniqueConstraint( 
        name = "NAME_AGE_UNIQUE",
        columnNames = {"NAME", "AGE"} )})
public class Member {

    @Id
    @Column(name = "ID")
    private String id;

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

    private Integer age;

    @Enumerated(EnumType.STRING)
    private RoleType roleType;

    @Temporal(TemporalType.TIMESTAMP)
    private Date createdDate;

    @Temporal(TemporalType.TIMESTAMP)
    private Date lastModifiedDate;

    @Lob
    private String description;

    @Transient
    private String temp;
}

 

RoleType.java

package jpabook.start;

public enum RoleType {
    ADMIN, USER
}

 

★코드 분석★

  1) @Enumerated(EnumType.STRING)
      private RoleType roleType;

 

      -> 자바의 enum을 사용해서 회원의 타입을 구분. enum을 사용하려면 @Enumerated 어노테이션으로 매핑해야함.

  

  2) @Temporal(TemporalType.TIMESTAMP)
    private Date createdDate;

    @Temporal(TemporalType.TIMESTAMP)
    private Date lastModifiedDate;

 

    ->자바의 날짜 타입은 @Temporal을 사용해서 매핑한다. 

 

  3)  @Lob
    private String description;

 

    -> 이 필드는 길이제한이 없이 만들어 져야 함. varchar 타입 대신 CLOB 타입으로 저장해야한다.

        @Lob 을 사용하면 CLOB, BLOB 타입을 매핑할 수 있다.

     

  4) @Column(name = "NAME", nullable = false, length = 10) 
      private String username;

 

    -> nullable = false 의 의미는 자동생성되는 DDL 에 not null 제약조건을 추가할 수 있다.

        length 속성은 자동생성되는 DDL에 문자읰 크기를 지정할 수 있다. 

 

  5) @Table(name="MEMBER", uniqueConstraints = {@UniqueConstraint( 
        name = "NAME_AGE_UNIQUE",
        columnNames = {"NAME", "AGE"} )})

 

    -> 유니크 제약조건.. 

 

   

 

4),5)번은 DDL이 자동생성될때만 영향을 준다.