@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 |