ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [JPA] 필드와 컬럼 매핑
    프로그래밍/Java 2021. 8. 20. 11:15
    반응형

    데이터베이스 스키마 자동 생성하기

    DDL을 애플리케이션 실행 시점에 자동 생성

    테이블 중심 -> 객체 중심

    데이터베이스 방언을 활용해서 데이터베이스에 맞는 적절한 DDL 생성

    이렇게 생성된 DDL은 개발 장비에서만 사용

    생성된 DDL은 운영서버에서는 사용하지 않거나 적절히 다듬은 후 사용

    명령문 설명
    create 기존 테이블 삭제 후 다시 생성 (DROP + CREATE)
    create-drop create와 같으나 종료 시점에 테이블 DROP
    update 변경분만 반영 (운영 DB에서 사용 X)
    Qvalidate 엔티티와 테이블이 정상 매핑되었는지만 확인
    none 사용하지 않음

    운영 장비에는 절대 create , create-drop, update 사용 금지

    개발 초기 단계는 create 또는 update

    테스트 서버는 update 또는 validate

    스테이징과 운영 서버는 validate 또는 none

     

     

    매핑 어노테이션

    @Entity
    public class Member {
     @Id
     private Long id;
     
     @Column(name="USERNAME", length=20, nullable=false) // db단에서는 username이라고 생성해라
     private String name;
     
     private int age;
     
     @Temporal(TemporalType.TIMESTAMP) // 시간 데이터
     private Date regDate;
     
     @Enumerated(EnumType.STRING) // 현업에서는 무조건 String을 쓸 것, 글자가 그대로 들어가야 나중에 값이 추가될때 안꼬임
     private MemberType memberType;
    }

    @Column

    name 필드와 매핑할 테이블의 컬럼 이름 
    insertable, updatable 읽기 전용
    nullable null 허용여부 결정, DDL 생성시 사용
    unique 유니크 제약 조건, DDL 생성시 사용
    columnDefiniton, length, precision, scale(DDL)  

    @Temporal

    시간 데이터에 사용 

    @Enumerated

    @Lob

    CLOB, BLOB 매핑

    CLOB: Character / BLOB: byte

    @Transient

    이 필드는 매핑하지 않는다. 

     

     

    식별자 매핑 어노테이션

    // Generate~는 자동생성 (Oracle의 Sequence와 같은 역할)
    @Id @GeneratedValue(strategty=GenerationType.AUTO)
    private Long id;
    IDENTITY 데이터베이스에 위임, MYSQL
    SEQUENCE 데이터베이스 시퀀스 오브젝트 사용, ORACLE
    @SequenceGenerator 필요
    TABLE 키 생성용 테이블 사용, 모든 DB에서 사용
    @TableGenerator 필요
    AUTO 방언에 따라 자동 지정, 기본값

    권장하는 식별자 전략

    기본 키 제약 조건: null 아님, 유일, 변하면 안된다. 

    int말고 long 타입을 써라(int는 10몇억까지 제약있음)

    미래까지 이 조건을 만족한느 자연키는 찾기 어렵다. 대리키(대체키)를 사용하자.

    권장: Long + 대체키 + 키 생성전략 사용

     

     

     

     

    반응형

    댓글

Designed by Tistory.