본문 바로가기
JPA with 김영한

엔티티 매핑

by wonseok99 2021. 8. 31.

- 객체와 테이블 매핑

@Entity
클래스에 Entity 어노테이션이 붙게되면 그 클래스는 JPA가 관리하기 시작하며 엔티티로 등록된다. 또한 JPA를 사용하기 위해서는 필수적으로 등록해야 한다.

[주의점]
- 기본 생성자 필수 (파라미터가 없는 public 또는 protected 생성자)

- final, enum, interface, inner 사용 X
- 저장한 필드에 final 사용 X

@Entity(name = "ClassName")
JPA에서 사용할 속성 이름을 따로 지정해 줄 수 있다. 보통 클래스의 이름을 기본값으로 사용한다.

 

 

- 필드와 컬럼 매핑


@Column : 컬럼 매핑

@Temporal : 날짜 타입 매핑

@Enumerated : enum 타입 매핑

@Lob : BLOB, CLOB 매핑

@Transient : 특정 필드를 컬럼에 매핑하지 않음(매핑 무시) - 메모리에서만 사용

 



- 기본 키 매핑

기본키(Primary Key) 를 JPA에서는 두 가지 방식으로 관리한다.

@Id : 직접 ID 매핑

@GenerateValue : 자동으로 ID 매핑

    1. IDENTITY
      기본 키 생성을 DB에 위임해준다.
      MySQL의 auto_increment와 같으며 PostgreSQL, H2, SQL Server 등에서도 사용
      DB에 INSERT SQL을 실행한 이후에 ID값을 식별 가능하다.
      PK값을 식별해야하는 영속성컨텍스트 때문에 persist와 동시에 INSERT 쿼리가 나가게 된다. [ commit 을 하는 시점이 아닌 ]

    2. SEQUENCE
      데이터베이스 시퀀스는 유일한 값을 순서대로 생성하는 특별한 데이터베이스 오브젝트 // Default = 1
      오라클과 같은 DB에서 많이 사용한다.
      persist 와 동시에 Sequence_name 으로부터 ID를 받아온다.

      * allocationSize
      시퀀스 매핑을 객체를 persist 할 때마다 call 하면 성능효율에 좋지 않다.
      따라서 allocationSize 를 설정해주면 그 수만큼 메모리상에 미리 시퀀스 설정을 해주고, 다 사용하게 되면 다시 
      DB 시퀀스를 호출하는 방식이다.
      또한 여러개의 서버가 동시에 호출하게 되더라도 allcoationSize 을 통해 [ 1~51, 52~100 ... ] 동시성 문제 또한 해결할 수 있다.
    3. TABLE
      키 생성 전용 테이블을 따로 생성한다. 
      모든 DB에 적용 가능하지만 또 다른 테이블을 활용한다는 점에서 성능이 좋지 않다.

I

 

- DB 스키마 자동생성

DDL(Database Definiton Language) 을 애플리케이션 실행 시점에 자동생성 해준다.
DB 방언을 활용하여 DB에 맞는 적절한 DDL을 생성하며 이러한 DDL은 개발장비에서만 사용되며
생성된 DDL은 운영서버에서는 사용하지 않거나, 적절히 다듬은 후에 사용한다.
[ 운영장비 X ] - 실무에서 잘못 활용하면 큰일난다.

"hibernate.hbm2ddl.auto" value = "속성"

  • create : 기존 테이블 삭제 후 다시 생성 (DROP + CREATE)
  • create-drop : create와 같으나 종료시점에 테이블 DROP
    개발 초기 단계에서만 사용 권장

  • update : 변경분만 반영 (운영 DB에는 사용하면 안됨)
  • validate : 엔티티와 테이블이 정상 매핑되었는지만 확인
  • none : 사용하지 않음

'JPA with 김영한' 카테고리의 다른 글

다양한 연관관계 매핑  (0) 2021.09.05
연관관계 매핑  (0) 2021.09.04
JPA와 영속성 컨텍스  (0) 2021.08.30
JPA의 구동방식  (0) 2021.08.25
변경 감지와 병합(merge)  (0) 2021.08.24