-
#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