LoGin
article thumbnail
728x90

@PrePersist

 

@PrePersist는 엔티티가 처음 저장되기 직전에 실행되는 메서드이다.

INSERT 쿼리가 나가기 전에 자동으로 호출된다.

 

@PrePersist
public void prePersist() {
	if (this.boardKey == null) {
		this.boardKey = UUID.randomUUID().toString();
	}
    this.createDt = LocalDateTime.now();
}

 

위 코드는 다음과 같은 역할을 한다.

  • boardKey가 없으면 UUID 자동 생성
  • 생성 시간(createDt) 자동 세팅
  • 수정 시간(updateDt)도 초기값으로 세팅

 

@PreUpdate

 

@PreUpdate는 엔티티가 수정될 때,

UPDATE 쿼리가 실행되기 직전에 호출된다.

 

@PreUpdate
public void preUpdate() {
	this.updateDt = LocalDateTime.now();
}

 

이렇게 작성하면 수정할 때마다 updateDt가 자동으로 갱신된다.

 


 

동작 흐름

 

게시글 생성 요청이 들어온다고 가정해 보자.

{
    "title": "게시글 제목",
    "contents": "게시글 내용",
    "userKey": "user01"
}

 

Service에서 Entity를 생성하면

BoardEntity board = new BoardEntity(title, contents, userKey);
repository.save(board);

 

JPA는 다음 순서로 동작한다.

 

1. save() 호출

2. INSERT 실행 직전 -> @PrePersist 실행

3. boardKey 자동생성

4. 시간 등록

 

 

JPA 상태 변화 생명주기

 

BoardEntity 객체 생성

→ [비영속]

→ persist() [영속] ex) save(), update()

값 변경 [Dirty Checking]

→ detach() [준영속]

→ remove() 영속 상태에서 수행

→ [삭제] comit 시 DELETE

 

 

 

데이터 확

반응형
profile

LoGin

@LoGinShin

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!