본문 바로가기

JPA

엔티티 매핑

1. 객체와 테이블 매핑

  @Entity

  • @Entity가 붙은 클래스는 JPA가 관리 
  • JPA 사용해서 테이블과 매핑할 클래스는 @Entity 필수
  • 기본 생성자 필수
  • final 클래스, enum, interface, inner클래스에 사용 불가
  • 저장할 필드에 final 사용 불가

  @Table

  • 엔티티와 매핑할 테이블을 지정

 

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

  • DDL을 애플리케이션 실행 시점에 자동 생성
  • 테이블 중심 -> 객체 중심
  • 개발 장비에서만 사용 권장(개발, 테스트 장비도 create, update는 권장하지 않음)
  • 개발 장비 : create 또는 update(alter 나감)
  • 테스트 장비 : update 또는 validate
  • 운영 장비 : validate 또는 none

 

3. 필드와 칼럼 매핑

  • @Column 매핑
  • 제약조건을 줄 수 있음
어노테이션 설명
@Column 칼럼 매핑
name : 필드와 매핑할 테이블의 칼럼 이름
updatable / insertable : 등록 변경 가능 여부(true/false)
nullable : null 값의 허용 여부(true/false)<br />unique : 한 칼럼에 유니크 조건을 걸 때 사용, table 어노테이션에 사용을 권장(칼럼에 사용시 이름이 랜덤한 값으로 생겨서 디버그 어려움)
columnDefinition : 데이터베이스의 칼럼정보를 직접 (ex : varchar(20))
length : 문자의 길이 제약 (string만)
precision/scale : BigDemical 타입에서 사용, precision 은 소수점, scale은 소수의 자릿수
@Temporal 날짜 타입 매핑
LocalTime, LocalDateTime을 사용할 때 생략 가능
@Enumerated 타입 매핑
Ordinal / String : Ordinal은 순서이기 때문에 사용X, enum값이 추가 되면 index가 바뀌게 된다.
@Lob BLOB, CLOB 매핑 (대용량)
@Transient 특정필드를 칼럼에 매핑하지 않음(무시)

 

4. 기본 키 매핑

  • 직접할당 : @Id로 직접 할당
  • 자동생성 : @GeneratedValue, 디폴트는 auto 아래의 3가지 중에 DB에 맞게 선택
    • IDENTITY : 자동 증가
      • JPA는 트랜잭션 커밋 시점에 insert를 함으로 ID값을 알 수가 없는 문제 발생, 영속성 컨텍스트는 ID 값을 알기 위하여 persist 시 insert 쿼리가 날라가게 된다.
    • SEQUENCE : 데이터 오브젝트를 참조하여 사용 (ex: 오라클 방식)
      • 미리 50개를 할당하여 사용하는 방식을 사용 table과 유사
    • TABLE : 키 생성 전용 테이블을 만들어서 사용
      • 모든 데이터베이스에 적용 가능, 성능은 떨어짐
      • 미리 50개를 할당하여 사용함, 메모리에 50개를 가지고 있다.
      • 영속성 컨텍스트에 넣기 위해서 ID 값을 알기 위해 시퀀스 테이블을 조회(ex : call next value for hibernate_sequence)

 

5. 권장하는 식별자 전략

  • null 아님, 유일, 불변
  • 불변을 유지하기는 어렵다. 자연키(비즈니스 값 ex: 전화번호, 주민번호 등) 보다는 대체키를 사용
  • 권장 : Long + 대체키 + 키 생성전략을 사용

 

 

 

 

**참고

인프런 - 자바 ORM 표준 JPA 프로그래밍 - 기본편 - 기본편(김영한)

'JPA' 카테고리의 다른 글

연관관계의 종류  (0) 2023.01.18
연관관계 매핑  (0) 2023.01.04
플러시  (0) 2022.12.22
영속성 컨텍스트  (0) 2022.12.20
JPA 사용 이유  (0) 2022.10.19