Home 엔티티 매핑
Post
Cancel

엔티티 매핑

엔티티 매핑

@Entity

  • @Entity가 붙은 클래스는 JPA가 관리하는 것으로, 엔티티라 부른다.
  • 테이블과 매핑할 클래스에 붙인다.
속성기능기본값
nameJPA에서 사용할 엔티티 이름을 지정설정값이 없으면 클래스 이름을 그래도 사용
  • 주의 사항
    • 기본 생성자는 필수이다.
    • final 클래스, enum, interface, inner 클래스에는 사용할 수 없다.
    • 저장할 필드에 final을 사용하면 안 된다.

@Table

  • @Table은 엔티티와 매핑할 테이블을 지정한다.
속성기능기본값
name매핑할 테이블 이름엔티티 이름
catalogcatalog 기능이 있는 데이터베이스에서 catalog를 매핑 
sehemacatalog 기능이 있는 데이터베이스에서 sehema를 매핑 
uniqueConstraints(DDL)DDL 생성 시에 유니크 제약조건을 만든다. 2개 이상의 복합 유니크 제약조건을 만들수 있다. 

@Enumerated

  • @Enumerated는 자바에서 제공하는 enum을 사용할때 사용한다.
속성기능기본값
valueEnumType 설정EnumType.ORDINAL

EnumType

  1. EnumType.ORDINAL : enum 순서 값을 DB에 저장
  2. EnumType.STRING : enum 이름을 DB에 저장

@Temporal

  • @Temporal는 자바의 날짜 타입을 사용할때 사용한다.
  • 자바8에서 지원하는 LocalDate, LocalDateTime을 사용할때 생략 가능
속성기능기본값
valueTemporalType 설정TemporalType.Date

TemporalType

  1. TemporalType.DATE: 날짜, 데이터베이스의 date타입과 매핑 (예: 2013-10-11)
  2. TemporalType.TIME: 시간, 데이터베이스의 time타입과 매핑 (예: 12:00:00)
  3. TemporalType.TIMESTAMP: 날짜와 시간, 데이터베이스의 timestamp타입과 매핑 (예: 2013-10-11 12:00:00)

@Lob

  • @Lob은 길이 제한이 없을 때 사용한다.
  • 매핑하는 필드 타입이 문자면 CLOB 매핑, 나머지는 BLOB 매핑

@Id

  • @Id는 테이블의 기본 키에 매핑할때 사용한다.
  • 기본 키를 직접 할당해 주어야 한다.

@SequenceGenerator

  • @SequenceGenerator 는 기본 키를 직접 할당하는 대신 데이터베이스가 생성해주는 값을 설정하도록 위임할때 사용한다.
속성기능기본값
strategyGenerationType 설정GenerationType.AUTO

GenerationType

  1. GenerationType.IDENTITY
  • 기본키 생성을 데이터베이스에 위임한다. 즉 @Id값을 null로 하면 DB에서 AUTO_INCREMENT를 해서 자동으로 id값을 넣어주게된다. ex) MySQL
  • AUTO_INCREMENT는 INSERT 쿼리 실행이후 id값을 설정하기 때문에 영속성 컨텍스트의 1차에서 관리불가하다. 그렇기 때문에 IDENTITY의 경우 EntityManager.persist() 를 하는 시점에서 INSERT SQL을 실행하기 때문에 식별자를 조회하여 영속성 컨텍스트의 1차 캐시에 값을 넣는다.
  1. GenerationType.AUTO
  • 기본 설정 값으로 각 데이터베이스에 맞게 자동으로 기본키를 생성해준다.
  1. GenerationType.SEQUENCE
  • 데이터 베이스 Sequence Object를 사용하여 데이터베이스가 자동으로 기본키를 설정하는데 @SequenceGenerator 어노테이션을 필수로 넣어야한다. ex)Oracle
  1. GenerationType.TABLE
  • 키 생성 전용 테이블을 하나 만들어 사용하는 방식으로 @TableGenerator 를 필요로 하고 Sequence 와 유사하다.

@Column

  • @Column은 객체 필드를 테이블 컬럼에 매핑할때 사용한다.
속성기능기본값
name필드와 매핑할 테이블의 컬럼 이름객체의 필드 이름
nullable(DDL)null 값의 허용 여부 설정true
unique(DDL)@Table의 uniqueConstraints와 같지만 한 컬럼에 간단한 유니크 제약조건을 걸 때 사용. 두 컬럼 이상을 사용해서 유니크 제약조건을 사용하려면 클래스 레벨에서 @Table.uniqueConstraints를 사용 
columnDefinition(DDL)데이터베이스 컬럼정보를 직접 줄 수 있다.필드의 자바 타입과 방언 정보를 토대로 컬럼 타입 생성
length(DDL)문자 길이 제약조건, String 타입에만 사용255
precision, scale(DDL)BigDecimal 타입에서 사용 precision : 소수점을 포함한 전체 , scale : 소수의 자릿수precision = 19, scale = 2

@Transient

  • @Traisient 는 매핍을 하지않을 때 사용한다.
  • 데이터베이스에 저장하지 않고 조회하지도 않는다. 임시로 어떤 값을 보관하고 싶을 때 사용

@Access

  • @Access는 JPA가 엔티티 데이터에 접근하는 방식을 지정할 때 사용한다.
  • @Id 가 필드 , 프로퍼티냐 에따라 자동으로 해주기 때문에 생략한다.
속성기능기본값
valueAccessType 설정 

AccessType

  1. AccessType.FIELD : 필드에 직접 접근 private 여도 가능
  2. AccessType.PROPERTY : getter 로 접근
This post is licensed under CC BY 4.0 by the author.