JPA

@CreationTimestamp, @PrePersist(JPA라이프 사이클 어노테이션)

Lahezy 2023. 3. 28.
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에서는 엔티티의 상태 변화에 따라 실행되는 라이프 사이클 콜백 메서드를 정의하는 다양한 어노테이션을 제공합니다.

이를 활용하여 엔티티가 특정상태에 도달할때 실행되는 메서드를 지정할 수 있습니다.

  1. @PrePersist: 엔티티가 영속화되기 전에 실행됩니다.
  2. @PostPersist: 엔티티가 영속화된 후에 실행됩니다.
  3. @PreUpdate: 엔티티가 업데이트되기 전에 실행됩니다.
  4. @PostUpdate: 엔티티가 업데이트된 후에 실행됩니다.
  5. @PreRemove: 엔티티가 삭제되기 전에 실행됩니다.
  6. @PostRemove: 엔티티가 삭제된 후에 실행됩니다.
  7. @PostLoad: 엔티티가 로드된 후에 실행됩니다.

 

https://www.baeldung.com/jpa-entity-lifecycle-events

https://bepoz-study-diary.tistory.com/384

 

728x90

댓글