본문 바로가기

스프링

[스프링] 필드와 컬럼 매핑 Annotation

@Entity 

  • @Entity가 붙어있는 클래스는 JPA가 관리하며, JPA를 사용해서 테이블과 매핑할 클래스에 붙게 된다.
  • 기본 생성자가 필수적으로 있어야 한다.(public 또는 protected 생성자)
  • final 클래스, enum, interface, inner 클래스 사용 불가
  • 저장할 필드에 final 사용 불가

속성

  • name  , ex) @Entity(name = "name") 

JPA에서 사용할 엔티티 이름을 지정하며, 디폴트값으로 해당 클래스의 이름을 그대로 사용한다.

 

@Column

  • 테이블의 column 매핑

속성

  • name , ex)@Column(name = "name") -> 테이블의 컬럼의 이름을 지정하며, 디폴트값으로는 클래스의 이름이 지정된다.
  • insertable, updatable , ex) @Column(insertable = true, updatable = true) -> 컬럼 값이 DB에 insert될건지 update 될건지 여부, 디폴트값으론 true이다.
  • nullable , ex) @Column(nullable = true) -> null값이 들어 올수 있는지 여부
  • unique , ex) @Column(unique = false) -> 한 컬럼의 유니크 제약조건을 건다. 다만 하나의 컬럼 위에서 유니크 조건을 걸시 name으로 이름을 지정하더라도 전혀다른 asldjda <- 이런식의 이상한 이름으로 지정되므로 잘 쓰지 않는다.(이름을 모르므로 어디서 오류가 떴는지 확인 어려움)
  • length , ex) @Column(length = 10) -> String 타입에만 사용 가능하며 varchar값이 10으로 된다.
  • columnDefinition , ex) @Column(columnDefinition = "varchar(100) default 'EMPTY'") -> 이 문구가 DDL에 그대로 들어감 즉, DB 컬럼 정보를 직접 줄 수 있다.

 

@Temporal

  • 지금은 LocalDate와 LocalDateTime을 이용하며, @Temporal은 사용하지 않는다.
  • 자바의 Date 객체를 이용함

속성

  • DATE , ex) @Temporal(TemporalType.DATE)  -> 년-월-일 의 date타입
  • Time , ex) @Temporal(TemporalType.TIME) -> 시 : 분 : 초 의 time 타입
  • TIMESTAMP , ex) @Temporal(TemporalType.TIMESTAMP) -> date + time 의 timestamp 타입

디폴트값은 TIMESTAMP 타입이다.

 

@Lob

  • Large Object의 줄임말
  • 필드의 문자열 길이는 디폴트값으로 varchar(255)까지 저장 가능하지만 사진과같은 더많은 수의 저장공간이 필요할 경우 @Lob 어노테이션을 붙혀 Large Object를 DB에 적절하게 저장한다.
  • 매핑 필드 타입이 String, char[]이면 CLOB매핑, 나머지는 BLOB 매핑
  • 지정 속성이 따로 없다.

 

@Enumerated

속성

  • STRING , ex) @Enumerated(EnumType.STRING) -> enum의 이름을 DB에 저장한다.
  • ORDINAL , ex) @Enumerated(EnumType.ORDINAL) -> enum의 순서를 0부터 DB에 저장한다. ORDINAL은 별로 좋지 않다. 
public enum RoleType{
	USER, ADMIN
}

위와같이 있을때 ID값 1번을 RoleType.USER로 DB에 저장하면 ID = 1번의 RoleType은 0이되고, ID값 2번을 RoleType.ADMIN으로 DB에 저장하면 ID = 2번의 RoleType은 1이된다. 하지만 여기서 RoleType의 값에 GUEST를 0번 자리에 추가하고, 

 

public enum RoleType{
	GUEST, USER, ADMIN
}

ID값 3번을 RoleType.GUEST로 DB에 저장하면 ID = 3번의 RoleType은 0이된다. 즉 

ID = 1 , RoleType = 0

ID = 2 , RoleType = 1

ID = 3 , RoleType = 0

이런식으로 옛날타입은 변하지 않고 다시 0이 저장되는걸 볼 수 있다. 따라서 필수적으로 STRING 속성을 이용해야 한다.

 

디폴트값이 ORDINAL 속성이다.

 

 

@Transient

  • 필드를 매핑하고싶지 않으면 사용
  • DB에 저장을 하지 않으며, 조회도 안된다.
  • 메모리상에서만 임시로 값을 저장할때 사용

 

'스프링' 카테고리의 다른 글

[스프링] 즉시로딩과 지연로딩  (0) 2023.02.10
[스프링] 프록시란  (0) 2023.02.10
[스프링] 기본키 관련 매핑 Annotation  (0) 2023.02.09
[스프링] 영속성 컨텍스트란  (0) 2023.02.09
JPA(Java Persistance API)란  (0) 2023.02.06