본문 바로가기
JPA

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

by steadyMan 2022. 8. 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;
}

'JPA' 카테고리의 다른 글

[JPA] batchsize  (0) 2024.05.01
[JPA] 영속성 컨텍스트  (0) 2022.08.09

댓글