엔티티 매핑...

Yangray·2021년 9월 28일
0

JPA

목록 보기
2/5

지난 영속성 컨텍스트에 이어서 이번에는 객체와 테이블 매핑 필드와 컬럼 매핑, 기본키 매핑
에 대해 작성해 보았다.

객체 테이블 매핑

@Entity

  • @Entity가 붙은 클래스는 JPA가 관리하고 이를 엔티티라 한다.
  • JPA를 사용해서 테이블과 매핑할 클래스는 @Entity를 필수로 입력해야 한다.

    주의

  • 기본 생성자 필수
    hibernate를 이용하면 라이브러리가 기본 생성자를 기본으로 설정하여 작성하지 않아도 오류 없이 작동이 되지만, hibernate의 버전이 변경이되거나 eclipseLink나 다른 라이브러리를 사용하면
    오류를 발생하므로 반드시 기본 생성자를 필수로 입력해야 한다. JPA 스펙상 반드시 기본생성자를 작성하도록 나와있으므로 반드시 작성하도록 하자!!
  • 저장할 필드에 final을 사용하면 안된다.

@Entity 속성 : name

  • JPA에서 사용할 엔티티 이름을 지정한다. 지정하지 않으면 클래스 이름을 그대로 사용하게 된다.

@Table

  • @Table은 엔티티와 매핑할 테이블 지정한다.

@Table 속성

  • name : 매핑할 테이블 이름을 지정, 기본값은 엔티티 이름을 사용한다.
  • catalog : 데이터베이스 catalog 매핑
  • schema : 데이터베이스 schema 매핑
  • uniqueConstraints : DDL 생성 시에 유니크 제약 조건을 생성한다.

필드,컬럼 매핑..

@Column

  • name : 필드와 매핑할 테이블의 컬럼 이름 기본값은 객체의 필드 이름으로 한다.
  • insertable, updateable : 등록, 변경 가능 여부 기본값은 TRUE
    false로 설정하면 등록,변경이 불가능한 읽기 전용으로 설정된다.
  • nullable : null갑의 허용 여부를 설정 false로 설정하면 DDL 생성 시 not null 제약 조건이 추가된다.
  • unique : @Table의 uniqueConstraints와 같지만 한 컬럼에 간단히 유니크 제약조건을 걸때 사용한다.
  • columnDefinition : 데이터베이스 컬럼 정보를 직접 줄 수 있다.
    ex) varchar(100) default 'EMPTY'
  • length : 문자 길이 제약 조건으로 String 타입에만 사용한다.
  • precision,scale : BigDecimal(BigInteger) 타입에 사용한다. precision은 소수점을 포함한 전체 자릿수, scale은 소수의 자릿수이며 double이나 float에는 적용되지 않고 아주 큰 숫자난 정밀한 소수를 다루어야 할 경우에만 사용한다. 기본값은 precision=19,scale=2이다.

@Enumerate

  • java enum 타입을 매핑할 때 사용
  • value : EnumType.ORDINAL : enum 순서를 데이터베이스에 저장
    EnumType.STRING : enum 이름을 데이터베이스에 저장한다.
    기본값은 EnumType.STRING이다.

@Temporal

-날짜 타입(java.util.Date,java.util.Calendar)을 매핑할 때 사용

  • TemporalType.DATE: 날짜, 데이터베이스 date 타입과 매핑
  • TemporalType.TIME: 시간, 데이터베이스 time 타입과 매핑
  • TemporalType.TIMESTAMP: 날짜와 시간, 데이터베이 스 timestamp 타입과 매핑

@Lob

  • 데이터베이스 BLOB,CLOB 타입과 매핑
  • 매핑하는 필드 타입이 문자이면 CLOB, 나머지는 BLOB

@Transient

  • 필드 매핑하지 않는 설정
  • 데이터베이스에 저장 및 조회 하지 않는다.
  • 주로 메모리상에서만 임시로 어떤 값을 보관하고 싶을 때 사용한다.

기본 키 매핑

@Id

  • 직접 할당 (@Id만 사용)

@GeneratedValue(자동생성)

@Id @GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
  • IDENTITY, SEQUENCE, TABLE, AUTO

IDENTITY 전략

  • 기본 키 생성을 데이터베이스에 위임
  • 주로 Mysql, PostgreSQL, SQL Server, DB2에서 사용하며 ex) Mysql의 AUTO_INCREMENT)
  • JPA는 보통 트랜잭션 커밋 시점에 INSERT SQL 실행한다.
  • AUTO_INCREMENT는 데이터베이스에 INSERT SQL을 실행 한 후 이후에 ID 값을 알 수 있다.
    따라서 IDENTITY전략은 em.persist() 시점에 즉시 INSERT SQL 실행 하고 DB에서 식별자를 조회 한다.

SEQUENCE 전략

  • 데이터베이스 시퀀스는 유일한 값을 순서대로 생성하는 특별한 데이터베이스 오브젝트이다.
  • 오라클,PostgreSQL, DB2, H2 데이터베이스에서 사용한다.
  • name : 식별자 생성기 이름 필수입력 값이다.
  • sequenceName : 데이터베이스에 등록되어 있는 시퀀스 이름이다.
  • initialValue : DDL 생성 시에만 사용된다. 시퀀스 DDL을 생성할 때 처음 시작하는 수를 지정한다. 기본값은 1이다.
  • allocationSize : 시퀀스 한 번 호출에 증가하는 수 ( 성능 최적화에 사용된다)
    데이터베이스 시퀀스 값이 하나씩 증가하도록 설정되어 있으면 이 값을 반드시 1로 설정해야 한다. 기본값은 50이다.
  • catalog, schema : 데이터베이스 catalog, schema 이름

Table 전략

  • 키 생성 전용 테이블을 하나 만들어서 데이터베이스 시퀀스를 흉내내는 전략
  • 장점 : 모든 데이터베이스 적용이 가능하다.
  • 단점 : 성능
  • name : 식별자 생성기 이름 필수 입력값이다.
  • table : 키 생성 테이블명이다 기본값은 hibernate_sequences이다.
  • pkColumnName : 시퀀스 컬럼명 기본값은 sequece_name이다.
  • valueColumnNa : 시퀀스 값 컬럼명 : 기본값은 next_val
  • pkColumnValue : 키로 사용할 값 이름 기본값 엔티티 이름
  • initialValue : 초기 값, 마지막으로 생성된 값이 기준이다. 기본값 0
  • allocationSize : 시퀀스 한 번 호출에 증가하는 수 주로 성능 최적화에 사용된다. 기본값은 50이다.
  • catalog,schema : 데이터베이스 catalog,schema 이름
  • uniqueConstraints : 유티크 제약 조건을 지정할 수 있다.
profile
시작은 미약하나 그 끝은 창대하리라

0개의 댓글