자바 ORM 표준 JPA 프로그래밍 - 엔티티 매핑

lacblueeun·2021년 1월 4일
0

springboot

목록 보기
8/17
post-thumbnail

✨✨ DDL 생성 기능은 DDL을 자동 생성할 때만 사용되고 JPA의 실행 로직에는 영향을 미치지 않는다.

1. @Entity

@Entity가 붙은 클래스는 JPA가 관리하는 엔티티이다.
테이블과 매핑할 클래스는 필수로 사용해야 한다.

@Entity (name="입력") : JPA에서 사용할 엔티티 이름을 지정한다. 기본값은 클래스의 이름과 동일하다.

1-1 사용시 주의할 점

  1. 기본 생성자 필수 (파라미터가 없는 public 또는 protected 생성자)
  2. 저장할 필드에 final 사용할 수 없다.
  3. final 클래스, enum, interface, inner 클래스 사용할 수 없다.

2. @Table

엔티티와 매핑할 테이블 지정하고 생략시, 엔티티 이름을 사용한다.

name : 매핑할 테이블 이름
catalog : 데이터베이스 catalog 매핑
schema : 데이터베이스 schema 매핑
uniqueConstraints : DDL 생성 시에 유니크 제약 조건 생성 (@column에서 생성하면 제약조건 이름이 랜덤으로 지정되기 때문에)

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

DDL을 애플리케이션 실행 시점에 자동으로 생성
데이터베이스 방언을 활용해서 데이터베이스에 맞는 적절한 DDL 생성
이렇게 생성된 DDL은 개발 장비에서만 사용하고 운영서버에서는 사용하지 않는다.

3-1 hibernate.hbm2ddl.auto

create : 기존테이블 삭제 후 다시 생성 (drop + create)
create-drop : create와 같으나 종료시점에 drop 사용한다. (테스트 케이스에서 활용 가능)
update : 변경분만 반영한다. (alter를 통해서 데이터베이스에 락이 걸릴 수도있다.)
validate : 정상 매핑되었는지 확인한다.
none : 아무것도 사용하지 않는다.

3-2 주의사항 💣

운영 장비에는 절대 create, create-drop 을 사용하면 안된다.
스테이징 운영 서버는 validate 또는 none 을 사용한다.
테스트 서버에서도 사용하지 않는 것이 좋다!
본인의 로컬에서만 사용하고, 여러명이 사용하는 서버에서는 사용하지 않도록 한다.

4. @Column

필드와 컬럼을 매핑

name : 필드와 매핑할 테이블의 컬럼 이름
insertable , updatable : 등록, 변경 가능여부
nullable : null값의 허용 여부를 설정한다. false로 설정하면 DDL 생성 시에 not null 제약조건이 붙는다.
unique : 한 컬럼에 간단히 유니크 제약조건을 걸 때 사용한다. (하지만 이름이 랜덤하게 생성된다.)
columnDefinition : 데이터베이스 컬럼 정보를 직접 줄 수 있다.
length : 문자 길이 제약조건, String 타입에만 사용한다.

5. @Eunmerated

자바 enum 타입을 매핑할 때 사용
ORDINAL 사용하지 않는다!!

@Eunmerated(EnumType.ORDINAL) : enum 순서를 데이터베이스에 저장
@Eunmerated(EnumType.STRING) : enum 이름을 데이터베이스에 저장

6. @Temporal

날짜 타입(java.util.Date, java.util.Calendar)을 매핑할 때 사용
최근 LocalDate, LocalDateTime 을 사용할 때는 생략 가능(최신 하이버네이트 지원)

TemporalType.DATE : 날짜, 데이터베이스 data 타입과 매핑 (2021-01-04)
TemporalType.TIME : 날짜, 데이터베이스 time 타입과 매핑 (15:46:12)
TemporalType.TIMESTAMP : 날짜, 데이터베이스 timestamp 타입과 매핑 (2021-01-04 15:46:12)

7. @Lob

데이터베이스 BLOB, CLOB 타입과 매핑하고 지정할 수 있는 속성이 없다. 매핑하는 필드 타입이 문자면 CLOB 나머지는 BLOB

8. @Transient

필드와 매핑하지 않는다. 데이터베이스에 저장과 조회 모두 하지않고, 주로 메모리상에서만 임시로 어떤 값을 보관하고 싶을때 사용한다.


참고

자바 ORM 표준 JPA 프로그래밍 - 기본편

profile
Go for Frontend Developer 🧪

0개의 댓글