자바 ORM 표준 JPA 프로그래밍_2

네코·2022년 7월 29일
0

김영한_JPA_기본

목록 보기
2/2

엔티티 매핑

객체와 테이블 매핑

@Entity

@Entity가 붙은 클래스는 jpa가 관리하고 엔티티라고 합니다.

  • 기본 생성자 필수(jpa 기본 스펙)
  • name속성의 기본값이 클래스명과 동일.

@Table

엔티티와 매핑할 테이블을 지정하는 애노테이션입니다.

필드와 컬럼 매핑

@Column

@Enumerated

기본 설정값이 EnumType.ORDINAL입니다. DB상에서 integer로 생성됩니다.
그러나 만약 enum타입의 값이 추가되어 순서가 달라지게된다면 순서에 대한 업데이트가 DB에서 처리되지 않기 때문에 문제가 발생할 수 있습니다.
따라서 EnumType.STRING을 사용하는 것이 좋습니다.

@Temporal

자바 8 이전의 Date 타입을 DB에 매핑할 때 사용합니다.
자바 8이후 지원되는 LocalDate,LocalDateTime은 별도의 애노테이션 없이 hibernate가 매핑합니다.

@Transient

해당 애노테이션이 붙은 필드는 DB에 생성되지 않습니다.

기본키 매핑

@Id

기본키로 지정

속성

strategy=

  • GenerationType.AUTO
    DB 종류에 따라 알맞은 pk값이 생성됩니다.

  • GenerationType.IDENTITY
    기본키 생성을 DB에 위임합니다.

    영속성 컨텍스트에서 관리되기 위해선 pk값이 필수적입니다. 그러나 identity전략에선
    persist()되는 시점에는 pk가 존재하지 않고 insert되는 시점에서야 알수 있습니다.
    따라서 identity전략에서는 예외적으로 commit 전에 insert쿼리가 실행됩니다.

    이후 저장한 엔티티의 값을 불러올 때, 실행 로그를 보면 select 쿼리가 나가지 않는 것은 insert시 pk값을 가져와 내부적으로 persistenceContext에 등록하기 떄문입니다.

  • GenerationType.SEQUENCE
    sequence 객체를 통하여 값을 세팅합니다.

  • GenerationType.Table
    키값을 뽑아낼 테이블을 생성하여 별도로 관리합니다.
    DB 종류에 관계없이 사용할 수 있는 장점이 있으나 성능 이슈가 있을 수 있습니다.

권장하는 방법

기본키 제약 조건은 크게 3가지 입니다.

  • not null
  • 유일성
  • 불변성
    Long형으로 선언하고 대체키+ 키생성전략을 사용하는 것을 권장한다고 합니다.
    주민번호와 같은 의미있는 값은 지양합니다.

실습

0개의 댓글