기본편(4) - 엔티티 매핑

객체와 테이블 매핑

@Entity


@Entity 가 붙은 클래스는 JPA가 관리하며, 엔티티라 부른다.
JPA를 사용하여 테이블과 매핑할 클래스는 필수이다.

* 주의사항 *
- 기본 생성자 필수
- final 클래스, enum, interface, inner 클래스 사용X

@Entity 속성 정리

  • name
    JPA에서 사용할 엔티티 이름, 기본값은 클래스 이름을 그대로 사용한다. 기본값 사용 권장

  • @Table
    엔티티와 매핑할 테이블 지정
    - name
    - catalog, schema, uniqueConstraints

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

  • 스키마란?
    DB내에 어떤 구조로 데이터가 저장되는가를 나타내는 데이터베이스 구조

출처: https://jwprogramming.tistory.com/47 [개발자를 꿈꾸는 프로그래머]

  • DDL: 테이블과 같은 데이터 구조를 정의하는데 사용하는 명령어

스키마 자동 생성이란
DDL을 애플리케이션 실행시점에 자동으로 생성하는 것을 의미하며, 테이블 중심에서 객체 중심의 개발이 가능하다.
하지만 개발단계에서만 사용해야 한다.

• 개발 초기 단계는 create 또는 update
• 테스트 서버는 update 또는 validate
• 스테이징과 운영 서버는 validate 또는 none

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

필드와 컬럼 매핑

  • 컬럼( Column ) : table에서의 열, 즉 테이블의 구성 요소

매핑 어노테이션 정리

  • @Column
    name : 필드와 매핑할 테이블의 컬럼 이름
    - default = 객체의 필드 이름
    insertable, updatable : 등록 변경 가능 여부
    - default = True

nullable(DDL) : null 값의 허용 여부

unique(DDL) : @Table의 uniqueConstraints와 같다.

columnDefinition(DDL) : 데이터베이스 컬럼 정보를 직접 줄 수 있다. 필드의 자바 타입과 방언 정보를 사용해야 함
ex) varchar(100) default ‘EMPTY'

length(DDL) : 문자 길이 제약조건, String 타입에만 사용한다. 255

precision, scale(DDL) : BigDecimal 타입에서 사용한다(BigInteger도 사용할 수 있다).

precision은 소수점을 포함한 전체 자 릿수를, scale은 소수의 자릿수다. 아주 큰 수를 다룰 때 사용
precision=19,
scale=2

  • @Temporal
    날짜 타입 매핑시, 최신 하이버네이트는 생략 가능
  • @Enumerated
    자바 enum 타입을 매핑할 때 사용
    -> EnumType.STRING: enum 이름을 데이터베이스에 저장
    꼭 STRING 타입을 사용해야 함!!
  • @Lob( Large Object)
    매핑하는 필드 타입이 문자면 CLOB 매핑, 나머지는 BLOB 매핑
  • @Transient
    데이터베이스에 저장,조회 하지 않음, 주로 메모리상에서만 값을 다루고싶을 때 사용한다.

기본 키 매핑

기본 키 매핑 어노테이션

  • @Id
  • @GeneratedValue

기본 키 매핑 방법

  • 직접할당 : @Id 어노테이션만 사용
  • 자동생성 ( @GeneratedValue )
    • IDENTITY: 데이터베이스에 위임, MYSQL
    - IDENTITY 전략은 em.persist() 시점에 INSERT SQL을 실행하고 DB에서 식별자를 조회한다. • SEQUENCE : 데이터베이스 시퀸스 오브젝트 사용 ( 순서대로 값을 부여해주는 데이터베이스 내 오브젝트 ) -> @SequenceGenerator
    @Entity 
    @SequenceGenerator( 
    name = “MEMBER_SEQ_GENERATOR", 
    sequenceName = “MEMBER_SEQ", //매핑할 데이터베이스 시퀀스 이름
    initialValue = 1, allocationSize = 1)
    • TABLE : 키 생성용 테이블 사용
    -> TableGenerator
@Entity 
@TableGenerator( 
 name = "MEMBER_SEQ_GENERATOR", 
 table = "MY_SEQUENCES", 
 pkColumnValue = “MEMBER_SEQ", allocationSize = 1) 

• AUTO : 방언에 따라 자동 지정, 기본값
- AUTO_ INCREMENT는 데이터베이스에 INSERT SQL을 실행한 이후에 ID 값을 알 수 있음

권장하는 식별자 전략

  • 기본 키 제약 조건: 변경 X, null X

  • 권장 : Long형 + 대체키 + 키 생성 전략 사용

    대체키 <-> 자연키( 예 :주민등록번호 )

좋은 웹페이지 즐겨찾기