JPA

[JPA] 일반필드와 컬럼 매핑

steadyMan 2022. 8. 20. 00:20

JPA에서는 엔티티의 필드와 DB의 컬럼을 매핑하여 사용하는데 주로 애노테이션 기반으로 매핑이 가능하다.

DDL 생성 기능을 사용할때도 옵션 추가가 가능한데 DDL 생성 기능은 제외하고

기본적인 필드와 컬럼의 매핑 방법에 알아보자 

@Column

필드와 매핑할 테이블의 컬럼이름을 직접 입력해야 할 때 사용한다. 등록, 변경에 가능 여부를 옵션으로 부여 가능하다.

@Entity
public class Member {
    @Column(name = "name", insertable = false, updatable = false)
    private String userName;
}
  • name : 매핑 대상의 컬럼명을 직접 입력한다. 
  • insertable : default는 true로 insert쿼리의 대상이 됐을 때 입력여부를 결정한다. 
  • updatable : default는 true로 update쿼리의 대상이 됐을때 변경 여부를 결정한다.

@Enumerated

자바의 Enum 타입을 필드 타입으로 사용할 때 입력한다. 

@Entity
public class Member {    
    @Enumerated(EnumType.STRING) 
    private Status status;
}

EnumType

파라미터로 DB에 저장될 속성을 결정할 수 있는데

  • EnumType.ORDINAL : 디펄트로 Enum에 명시된 순서가 데이터베이스에 입력된다. 
  • EnumType.STRING : Enum의 필드명(이름)이 데이터베이스에 입력된다. 

추가, 삭제 등으로 명시 순서는 언제든지 변경될 수 있으므로 STRING의 사용이 권장된다. 

@Temporal

자바의 날짜 타입 (java.util.Date, java.util.Calendar)을 컬럼과 매핑할 때 사용한다. 

@Entity
public class Member {        
    @Temporal(TemporalType.TIMESTAMP)
    private Date joinDate;
}

TemporalType의 값으로 3가지가 있다.

  • TemporalType.DATE : 날짜(년-일-월) 데이터가 데이터베이스(date)에 입력된다.
  • TemporalType.TIME : 시간(시-분-초) 데이터가 데이터베이스(time)에 입력된다.
  • TemporalType.TIMESTAMP : 날짜와 시간 데이터가 데이터베이스(timestamp)에 입력된다.

자바 8의 LocalDate, LocalDateTime 타입을 사용할 때는 하이버네이트가 지원하기 때문에 생략 가능하다. 

@Lob

데이터베이스의 CLOB, BLOB 타입과 매핑된다. 

@Entity
public class Member {        
	@Lob
	private String content;	
}

따로 속성은 없고 필드 타입이 문자면 CLOB, 나머지는 BLOB가 매핑된다.

  • CLOB : String, char[], java.sql.CLOB
  • BLOB : byte[], java.sql.BLOB

@Transient

필드 매핑을 하지않고, 데이터베이스에 저장, 조회를 하지않는다. 주로 메모리 상에서만 사용하고 싶을때 사용한다. 

@Entity
public class Member {        
	@Transient
	private String tempData;
}