본문 바로가기
프레임워크/JPA

[JPA] 필드와 컬럼 매핑

by Yikanghee 2022. 3. 14.
  • 요구사항 추가
    • 회원은 일반 회원과 관리자로 구분해야 한다
    • 회원 가입일과 수정일이 있어야 한다
    • 회원을 설명할 수 있는 필드가 있어야 한다. 이 필드는 길이 제한이 없다
@Entity
public class Member {
	
	@Id
	private Long id;
	
	@Column(name = "name")
	private String username;
	
	private Integer age;
	
	@Enumerated(EnumType.STRING)
	private RoleType roleType;

	@Temporal(TemporalType.TIMESTAMP)
	private Date createdDate;
	
	@Temporal(TemporalType.TIMESTAMP)
	private Date lastModifiedDate;
	
	@Lob
	private String description;

	public Member() {
	}
}
public enum RoleType {
	USER, ADMIN
}
  • ENUM
    • JPA, 객체에서 ENUM 타입을 사용하고 싶은데 DB에는 ENUM타입이 없다
    • 그럴때 Enumerated 를 사용해주면 사용할 수 있고
  • DATE
    • 날짜를 사용할때에는 Temporal를 사용하는데 TemporalType을 까보면 enum 구조다
    public enum TemporalType {
    
    	DATE,
    	//날짜
    	TIME,
    	//시간
    	TIMESTAMP
    	//날짜, 시간 둘 다 포함
    }
    
  • Lob
    • Varchar2를 넘어서는 큰 용량을 사용하고 싶을때 사용
  • Transient
    • 컬럼을 DB에 적용하지 않음, 메모리에서만 사용
    • 계산용이나 사용자 설정으로 사용함
    @Transient
    private int temp;
    
  • @Column
    • name
    @Column(name = "name")
    private String username;
    
    필드와 매핑할 테이블의 컬럼 이름
    • insertable , updatable
    @Column(updatable = false)
    private String username;
    
    컬럼 내용의 등록, 변경 여부를 결정한다
    • nullable
    @Column(nullable = false)
    private String username;
    
    null 값의 허용 어부를 설정한다. false로 설정하면 DDL 생성 시에 not null 제약조건이 붙는다
    • unique
    @Column(unique = true)
    private String username;
    
    @Table의 uniqueConstraints와 같지만 한 컬럼에 간단히 유니크 제약조건을 걸 때 사용한다
    • columnDefinition
    @Column(columnDefinition = "varchar(100) default 'EMPTY'"
    private String username;
    
    데이터베이스 컬럼 정보를 직접 줄 수 있다
  • 길이만 적용할 경우 length를 사용한다
  • 선호하는 방법은 아니다
  • 기본 값은 TRUE이고, false 일 경우 update문 사용이 불가능하다
  • enum 타입을 매핑할 때 주의 사항
@Enumerated(EnumType.ORDINAL)
private RoleType roleType;

@Enumerated(EnumType.STRING)
private RoleType roleType;

ENUM 타입으로 매핑해줄 때 2가지 방벙으로 매핑할 수 있다

  1. STRING 타입은 이름으로 관리하여 매핑한다
  2. ORDINAL 타입은 ENUM 순서로 관리한다

만약 개발중에 설정해 놓은 ENUM을 변경해야 할때 순서가 바뀌게 되면 오류가 발생한다

그러므로 ORDINAL 개발보다 STRING 개발을 선호한다

기본 값은 ORDINAL로 되어있으니 STRING을 추가하는 것이 좋다


이 글은 김영한님의 JPA 기본편을 정리한 글입니다.

댓글