STUDY/TIL

JPA | DynamicInsert, DynamicUpdate, 엔티티 리스너

개미606 2021. 8. 31. 13:06

DynamicInsert, DynamicUpdate

기본적으로 하이버네이트는 INSERTUPDATE시에 모든 컬럼을 사용한다.
@DynamicInsertINSERT 구문 생성 시점에 null이 아닌 컬럼들만 포함하며,
@DynamicUpdateUPDATE구문 생성 시점에 null이 아닌 컬럼만(변경된 값만) 포함한다.
해당 애노테이션들은 엔티티에 직접 적용하여 사용한다.

@DynamicInsert
@DynamicUpdate
@Entity
public class User {
    // 생략
}

@DynamicInsert는 컬럼의 지정된 default 값을 적용시키며 INSERT할 때 사용할 수 있다.


@Coulmun(columnDefinition = "")에 지정한 default 값은 DDL 생성기능이다.
즉, 설정에서 ddl-auto나, create-drop같은 값을 지정하면 DDL이 생성되지만, 아무 값도 지정하지 않으면 이미 생성된 DB와 매핑되므로
기본값을 저장하는 것과는 관련이 없다.


Entity Listner

JPA의 리스너 기능은 엔티티의 생명주기에 따른 이벤트를 처리할 수 있게 한다.

  • PrePersist: 엔티티를 영속성 컨텍트스에 관리하기 직전
  • PostPersist: 엔티티를 데이터베이스에 저장한 직후
  • PreUpdate: 엔티티를 데이터베이스에 수정하기 직전
  • PostUpdate: 엔티티를 데티터베이스에 수정한 직후
  • PreRemove: 엔티티를 영속성 컨텍스트에서 삭제하기 직전
  • PostRemove: 엔티티를 데이터베이스에 삭제한 직후
  • PostLoad: 엔티티가 영속성 선텍스트에 조회된 직후 또는 refresh를 호출한 후