ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • #JPA-8 데이터베이스 스키마 자동 생성 & 필드와 컬럼 매핑
    JPA 2021. 2. 15. 23:03

    [출처] 인프런 김영한 강사님 -자바 ORM 표준 JPA 프로그래밍 기본

     

    1. 데이터베이스 스키마 자동생성

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

    • 테이블 중심 -> 객체 중심

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

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

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

     

    2. 데이터베이스 스키마 자동 생성 - 속성

    hibernate.hbm2ddl.auto

    스키마 자동 생성하기 설정

    • 스키마 자동생성하기 실행, 옵션별 확인

    • 데이터베이스 방언 별로 달라지는 것 확인(varchar)

     

     

    3. 필드와 컬럼 매핑

    매핑 어노테이션 정리

    hibernate.hbm2ddl.auto

    • @Lob- DB VARCHAR를 넘어서는 큰 컨탠츠, 문자타입이면 기본적으로 CLOB으로 생성

    • @Trasient - DB랑 전혀 신경쓰고 싶지않아 메모리에서만 쓰고싶을 때 사용.

                       (ex)메모리에만 임시로 넣어두거나 캐시에만 넣어두고 싶을 때)

     

     

    @Column

     insertable, updatebale : 컬럼을 수정했을 때 DB에 insert,update를 할꺼야 말꺼야? (default = true)

    nullable :  not null 제약조건 (default = true)

    unique :  unique 제약조건을 걸어준다. 하지만 잘안쓴다 

                    why?  -> unique제약조건을 만들어주긴 하지만 이름이 랜덤으로 막지어진다.

                                (이름을 운영에 반영하기 어렵다.)

                     그래서 이렇게 쓰인다. 이름까지 걸 수 있다.

    length :  length =10 -> varchar(10)

    • columnDefinition : 컬럼정의를 직접하고 싶을 때 사용 , 특정DB에 종속적인 옵션들도 넣을 수 있다.

    • precision, scale : 숫자가 엄청 큰 경우 소수점에 특정한 값을 줄 수 있다.

     

     

    @Enumerated

    자바 enum 타입을 매핑할 때 사용 주의! ORDINAL 사용X

    ORDINAL을 쓰면 안되는 이유!! 기본적으로 아무것도 안쓰면 ORDINAL

    사용자의 요구사항에 따라 GUEST라는게 추가됫을 경우 ??????????????

    A도 ROLETYPE이 0이고, C도 0이다. 순서가 완전 꼬여버리게 된다.

     

    그래서 필수로 String으로 써야한다.

    @Enumerated(EnumType.STRING)

     

    @Temporal (옛날에 필요하고 지금은 필요없다)

    날짜 타입(java.util.Date, java.util.Calendar)을 매핑할 때 사용

     

    참고: LocalDate, LocalDateTime을 사용할 때는 생략 가능(최신 하이버네이트 지원)

    java 8부터 지원

    @Lob

    데이터베이스 BLOB, CLOB 타입과 매핑

    • @Lob에는 지정할 수 있는 속성이 없다.

    • 매핑하는 필드 타입이 문자면 CLOB 매핑, 나머지는 BLOB 매핑

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

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

    @Transient

    • 필드 매핑X

    • 데이터베이스에 저장X, 조회X

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

    • @Transient private Integer temp;

    'JPA' 카테고리의 다른 글

    #JPA-10 연관관계 매핑 기초  (0) 2021.02.17
    #JPA-9 기본 키 매핑  (0) 2021.02.16
    #JPA-7 엔티티 매핑  (0) 2021.02.15
    #JPA-6 플러시 & 준영속 상태  (0) 2021.02.15
    #JPA-5 영속성 컨텍스트(2)  (0) 2021.02.15

    댓글

Designed by Tistory.