Notice
Recent Posts
Recent Comments
Link
관리 메뉴

look-forest

엔티티 매핑 본문

JPA/JPA

엔티티 매핑

studyHub 2024. 9. 8. 22:04

객체와 테이블 매핑

@Entity : @Entity가 붙은 클래스는 JPA가 관리, 엔티티라 한다. (기본 생성자 필수)

@Table : 엔티티와 매핑할 테이블 지정.

   - name  : 매핑할 테이블 이름 지정

   - uniqueConstraints : DDL 생성 시에 유니크 제약 조건 생성

 

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

생성된 DDL은 개발 장비에서만 사용해야 한다. create/update 옵션

검증에서는 validate 옵션 정도

운영은 위험하다. none

 

DDL 생성 기능

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

  • 제약조건 추가 : @Column(nullable = false, length = 10)
  • 유니크 제약조건 추가 : @Table(uniqueConstraints = {@UniqueConstraint( name = "NAME_AGE_UNIQUE", columnNames = {"NAME", "AGE"} )})

필드와 컬럼 매핑

  • @Column : 컬럼 매핑 시 옵션 추가할 경우 사용
  • @Enumerated : enum 타입 매핑임을 명시한다 (주의! 기본값인  ORDINAL 사용X )
    - EnumType.ORDINAL: enum 순서를 데이터베이스에 저장 (0,1,2,, enum의 순서를 바꾸면 꼬인다!)
    - EnumType.STRING: enum 이름을 데이터베이스에 저장
  • @Lob : BLOB, CLOB 매핑 (Large OBject. Binary / Char)
  • @Transient : 특정 필드를 컬럼에 매핑하지 않음(매핑 무시. 주로 메모리상에서만 임시로 어떤 값을 보관하고 싶을 때)


기본 키 매핑

- 직접 할당 : @Id만 사용

- 자동 생성 : @GeneratedValue 추가. 키 값을 설정하면 insert가 안된다. 비워둬야한다.

 

생성키 전략

  • IDENTITY: 데이터베이스에 위임, MYSQL 계열 (예: MySQL의 AUTO_ INCREMENT)
    DB에 insert 시점에 id값을 알 수 있으므로, IDENTITY 전략은 em.persist() 시점에 즉시 INSERT SQL 실행하고 DB에서 식별자를 조회하여 객체에 setting하고 영속성 컨텍스트에 저장한다.
    [단점]
    Id가 무조건 따져야하므로 영속성 컨텍스트에 등록되는 순간 DB에 쿼리가 날라가서 Insert 된다.
    그래서 batch insert를 못 한다.. 채번을 해서 넣어야하니까.. 10번이면 10번 다 넣어야 한다.
  • SEQUENCE: 데이터베이스 시퀀스 오브젝트 사용, ORACLE 계열. @SequenceGenerator 필요.
    마찬가지로 DB에서 시퀀스 값을 가져와서 객체에 id에 할당 후 영속성 컨텍스트에 들어간다.
    allocationSize : 시퀀스 한 번 호출에 증가하는 수. 성능 최적화에 사용됨. 기본값 50으로, 매번 시퀀스 값을 DB에서 읽어오지 않기 위해 50개를 확보해두는 개념. (다른 서버에서는 51~100)
    데이터베이스 시퀀스 값이 하나씩 증가하도록 설정되어 있으면 이 값을 반드시 1로 설정해야 한다
    단점: 귀찮다
    마찬가지로 DB에서 시퀀스 값을 가져와서 객체에 id에 할당 후 영속성 컨텍스트에 들어간다.
    allocationSize : 시퀀스 한 번 호출에 증가하는 수. 성능 최적화에 사용됨. 기본값 50으로, 매번 시퀀스 값을 DB에서 읽어오지 않기 위해 50개를 확보해두는 개념. (다른 서버에서는 51~100)
    데이터베이스 시퀀스 값이 하나씩 증가하도록 설정되어 있으면 이 값을 반드시 1로 설정해야 한다
  • TABLE: 키 생성 전용 테이블을 하나 만들어서 데이터베이스 시퀀스를 흉내내는 전략. 
    모든 DB에서 사용 가능하나, 성능에 좋지 않다. @TableGenerator 필요.
  • AUTO: 방언에 따라 위 3가지 중 자동 지정, 기본값.

권장하는 식별자 전략

기본 키 제약 조건: null 아님, 유일, 변하면 안된다.

-> 미래까지 이 조건을 만족하는 자연키는 찾기 어렵다. 대리키(대체키)를 사용하자

일관성과 불변성 측명에서 하나의 컬럼을 사용하는 단순키 선호. 쉽게 가자.

단순성과 관리 관점에서 생성키(엔티티 저장 시 JPA 또는 DB 생성하는 키) 선호.

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

 


참고 자료 & 이미지 출처
자바 ORM 표준 JPA 프로그래밍 - 기본편 (김영한 님)


 

'JPA > JPA' 카테고리의 다른 글

고급 매핑  (0) 2024.09.10
다양한 연관 관계 매핑  (0) 2024.09.09
연관관계 매핑 기초  (1) 2024.09.09
영속성 관리 - 내부 동작 방식  (0) 2024.09.08
JPA 시작  (0) 2024.09.08