728x90
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
@CreationTimestamp
private LocalDateTime createdDate1; //생성 시점
private LocalDateTime createdDate2; //생성 시점
@UpdateTimestamp
private LocalDateTime updatedDate; //업데이트 시점
@PrePersist
public void prePersist(User user) {
// 저장 전에 필요한 작업 수행
createdDate2 = LocalDateTime.now();
}
}
처음 JPA사용이 미숙할때는 빌더 패턴을 사용하여 생성시에 저장시간을 직접 넣어서 저장하였습니다.
하지만 관련 코드들을 보다가 유용한 어노테이션들을 알게 되었습니다.
@CreationTimestamp, @UpdateTimestamp 어노테이션은 Hibernate가 제공하는 어노테이션으로, 엔티티가 저장될 때 자동으로 현재 시간으로 설정됩니다. 따라서, 직접 날짜를 설정하지 않아도 자동으로 생성 일시를 저장할 수 있습니다.
@PrePersist 어노테이션은 JPA에서 제공하는 어노테이션으로 개발자가 직접 메소드를 작성하고 어노테이션을 설정합니다.
예시 코드 에서 보인것처럼 @CreationTimestamp 어노테이션은 자동으로 저장되는 시점을 저장하고, @PrePersist 어노테이션은 개발자가 직접 설정하는 방식입니다.
추가로 JPA에서는 엔티티의 상태 변화에 따라 실행되는 라이프 사이클 콜백 메서드를 정의하는 다양한 어노테이션을 제공합니다.
이를 활용하여 엔티티가 특정상태에 도달할때 실행되는 메서드를 지정할 수 있습니다.
- @PrePersist: 엔티티가 영속화되기 전에 실행됩니다.
- @PostPersist: 엔티티가 영속화된 후에 실행됩니다.
- @PreUpdate: 엔티티가 업데이트되기 전에 실행됩니다.
- @PostUpdate: 엔티티가 업데이트된 후에 실행됩니다.
- @PreRemove: 엔티티가 삭제되기 전에 실행됩니다.
- @PostRemove: 엔티티가 삭제된 후에 실행됩니다.
- @PostLoad: 엔티티가 로드된 후에 실행됩니다.
https://www.baeldung.com/jpa-entity-lifecycle-events
https://bepoz-study-diary.tistory.com/384
728x90
'JPA' 카테고리의 다른 글
JpaAuditing을 이용해서 base entity 생성하기 (1) | 2023.06.24 |
---|---|
JPA에서 soft delete 쉽게 처리하기 (0) | 2023.05.12 |
JDBC, JPA, ORM (0) | 2023.04.12 |
spring boot 3 Query Dsl적용 (네이티브 쿼리 작성으로 N+1문제 해결) (0) | 2023.03.31 |
엔터티 설계 주의사항 (0) | 2023.02.27 |
댓글