티스토리 뷰

객체와 테이블 매핑

 

@Entity

- @Entity가 붙은 클래스는 JPA가 관리

- JPA를 사용해서 테이블과 매핑할 클래스는 @Entity 필수

 

속성 : name

- JPA에서 사용할 엔티티 이름 지정 (기본값: 클래스 이름)

 

@Table

- @Table은 엔티티와 매핑할 테이블 지정

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

- DDL(Database Definition Langauge)을 애플리케이션 실행 시점에 생성

- 테이블 중심 -> 객체 중심

- 데이터베이스 Dialect에 맞게 적절한 DDL 생성

- 개발 장비에서만 사용, 운영서버에서는 사용하지 않는다

 

속성

hibernate.hbm2ddl.auto

- 운영 장비에는 절대 create, create-drop, update 사용하면 안된다

- 제약 조건 추가: 회원 이름 필수, 10자 초과 @Column(nullable = false, length = 10)

- 유니크 제약 조건 : @Table(uniqueConstraints = {@UniqueConstraint( name = "NAME_AGE_UNIQUE", columnNames = {"NAME",

"AGE"} )})

-> @Column의 unique보다 @Table의 unique 제약 조건을 걸어야 해당 이름을 알 수 있다 (예외 처리 편리)

 

필드와 컬럼 매핑

 

매핑 어노테이션 정리

@Column

@Enumerated

- Java enum 타입을 매핑할 때 사용

- ORDINAL 타입말고 STRING 사용!

- ORDINAL 사용하면 숫자로 들어가는데 나중에 enum에 새로운 값이 들어가면 구별 불가능

 

@Temporal

- 날짜 타입을 매핑할 때 사용

- LocalDate, LocalDateTime을 사용하면 생략이 가능

 

@Lob

- 데이터베이스 BLOB, CLOB 타입과 매핑

- 문자면 CLOB 매핑, 나머지는 BLOB

 

@Transient

- 필드 매핑 X, 데이터베이스에 저장 X, 조회 X

- 주로 메모리상에서만 임시로 어떤 값을 보관하고 싶을 때 사용

 

기본 키(Primary Key) 매핑

@Id

@GeneratedValue

 

기본 키 매핑 방법

- 직접 할당 : @Id 사용

- 자동 생성 (@GeneratedValue)

  • IDENTITY : 데이터베이스에 위임, MySQL
  • SEQUENCE : 데이터베이스 시퀀스 오브젝트 사용, ORACLE, @SequenceGenerator 필요
  • TABLE : 키 생성용 테이블 사용, 모든 DB에서 사용, @TableGenerator 필요
  • AUTO : Dialect에 따라 자동 지정, 기본값

IDENTITY 전략 - 특징

- 기본 키 생성을 데이터베이스에 위임

- 주로 MySQL, PostgreSQL, SQL Server에서 사용 (MySQL의 AUTO_INCREMENT)

- JPA는 보통 트랜잭션 커밋 시점에 INSERT SQL이 실행되지만

- IDENTITY 전략을 사용하면 em.persist() 시점에 즉시 INSERT SQL이 실행하여 DB에서 식별자 조회

 

SEQUENCE 전략 - 특징

- 데이터베이스 시퀀스는 유일한 값을 순서대로 생성하는 특별한 데이터 오브젝트

- ORACLE, PostgreSQL, H2 데이터베이스에서 사용

@Entity
@SequenceGenerator(
        name = "MEMBER_SEQ_GENERATOR",
        sequenceName = "MEMBER_SEQ", //매핑할 데이터베이스 시퀀스 이름
        initialValue = 1, allocationSize = 1) //allocationSize = 50 (default)
public class Member {

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE,
    generator = "MEMBER_SEQ_GENERATOR")
    private Long id;
}

 

@SequenceGenerator

- allocationSize 기본값 = 50

- Sequence를 사용하면 계속 네트워크를 왔다갔다 하면서 성능 저하에 대한 우려가 있다

- 이럴 때에는 메모리 할당 사이즈(allocationSize)를 50으로 할당한다

- 50으로 사이즈를 할당하면 next call 할 때 미리 DB에 50개를 한 번에 올려놓고 메모리 상에서 1개씩 쓰는 것ㅇ

- 50개를 모두 사용하면 다음에 또 50개를 다시 할당한다

 

TABLE 전략

- 키 생성 전용 테이블을 하나 만들어서 시퀀스 흉내내는 전략

- 장점 : 모든 DB에서 적용 가능

- 단점 : 성능

 

권장하는 식별자 전략

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

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

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

 

 

출처 : 자바 ORM 표준 프로그래밍

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/08   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
글 보관함