본문 바로가기
개발 관련/spring

JPA 어노테이션

by lazysnack 2022. 7. 14.

1. NotFound

org.hibernate.annotations 에 포함되어 있음

@JoinColumn 등으로 조인을 했을 시, 조인한 테이블의 값이 null 일 경우

EntityNotFoundException 이 발생하는데, 이럴 경우

@JoinColumn("dto_id")
@NotFound(action = NotFoundAction.IGNORE)
private DTO dto;

을 해주면 Exception 이 발생하지 않음. Ignore, Exception 2개의 값이 있는데 default 는 Exception 인 모양이다.

2. Transient

javax.persistence 에 포함되어 있음

Entity 에 변수는 있으나, 컬럼과의 매핑을 원하지 않는 경우 사용

@Transient
private String compositeUrl;

주로 결과를 바로 넘기지 않고, 결과값을 조작해서 (filePath 에 fileName 을 더해준다거나..) 새로운 변수에 넣거나 할 때 썼다.

3. JsonIgnore

엄밀히 말하면 JPA 용 annotation 은 아니지만, 사용할 땐 2번과 연관하여 사용했던 것 같다.

결과 형태를 json 으로 뿌려줄 때, 해당 변수가 출력되지 않게 함

@JsonIgnore
private Member member;

4. Embedded, Embeddable

Entity 안에 다른 Entity 를 넣을 경우 해당 annotation 들을 사용, 관련있는 것들을 하나로 묶어서 객체로 사용할 때 사용함

ex) Article 이라는 클래스가 있고, 해당 등록 정보를 RegInfo 로 관리한다고 하면

@Entity
public class Article {
    @ID
    private Long id;

    private String content;

    @Embedded
    private RegInfo regInfo;
}
@Entity
@Embeddable
public class RegInfo {
    @Column("reg_id")
    private Long regId;

    @Column("reg_dt")
    private LocalDateTime regDt;
}

5. Convert

DB에서 사용하는 값과 서버에서 사용하는 타입이 서로 달라 값을 변경해줘야 할 때 사용

주로 IP (127.0.0.1) 같이 String 으로 받은 값인데, DB 에는 Number 형태로 저장하거나 서버에서는 Boolean 값을 사용하는데 DB 에서는 Y/N 값으로 저장할 때 사용하곤 했다.

@Convert(converter = YNBooleanConverter.class)
@Column("use_yn")
private Boolean use;

당장 쓰는 것 중에 생소한 것은 이정도 되는 것 같다.

추후 진행하면서, 새로운 걸 써보면 그 때 추가할 예정.

'개발 관련 > spring' 카테고리의 다른 글

Feign 사용 (1)  (0) 2022.07.14
HandlerMethodArgumentResolver 사용  (0) 2022.07.14
JPA 락에 대해  (0) 2022.07.14
Mockito 정리 (1)  (0) 2022.07.14
SpringBoot Actuator  (0) 2022.07.14