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
데이터 확

반응형
'Back End > Spring' 카테고리의 다른 글
| Spring @Transactional 롤백 안 되는 이유? Try-Catch 사용하며 놓친 경험 (1) | 2025.05.26 |
|---|---|
| JPA 지연로딩 (Lazy Loading)과 N+1 문제 정리 - fetchJoin, DTO활용 (0) | 2025.04.09 |
| LocalDateTime과 ZonedDateTime 시간, UTC 타임존 적용하기 (3) | 2024.10.28 |
| Spring Security UsernamePasswordAuthenticationToken 사용해보자 (2) | 2024.07.25 |
| JPA와 하이버네이트: 객체-관계 매핑의 장점과 비교 (29) | 2024.03.09 |