spring

entity를 저장할때 LocalDateTime에서 초를 저장하지 않는 법

seungmin576 2025. 3. 13. 14:17
package org.example.expert.domain.common.entity;

import jakarta.persistence.*;
import lombok.Getter;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;

import java.time.LocalDateTime;
import java.time.temporal.ChronoUnit;

@Getter
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public abstract class Timestamped {

    @CreatedDate
    @Column(updatable = false)
    @Temporal(TemporalType.TIMESTAMP)
    private LocalDateTime createdAt;

    @LastModifiedDate
    @Column
    @Temporal(TemporalType.TIMESTAMP)
    private LocalDateTime modifiedAt;

    @PrePersist
    public void onPrePersist() {
        this.createdAt = createdAt.truncatedTo(ChronoUnit.MINUTES);
        this.modifiedAt = modifiedAt.truncatedTo(ChronoUnit.MINUTES);
    }

    @PreUpdate
    public void onPreUpdate() {
        this.modifiedAt = modifiedAt.truncatedTo(ChronoUnit.MINUTES);
    }
}

위는 초를 저장한 것 아래는 코드를 추가하여 초를 저장하지 않은 것

 

@PrePersist@PreUpdate는 JPA(EntityManager)에서 제공하는 콜백 메서드로, 엔티티가 영속성 컨텍스트에 추가되거나 업데이트되기 전에 특정 동작을 수행할 수 있게 합니다.

이 어노테이션들을 사용하면 엔티티가 저장되거나 업데이트되기 전에 수행해야 하는 로직을 정의할 수 있습니다.

1. @PrePersist
   - 엔티티가 처음으로 영속성 컨텍스트에 추가되기 전에 실행됩니다. 즉, 엔티티가 데이터베이스에 처음 저장되기 전에 호출됩니다.
   - 이 어노테이션을 사용하여 엔티티가 처음 저장되기 전에 설정해야 할 초기값이나 다른 처리를 수행할 수 있습니다.

2. @PreUpdate:
   - 엔티티가 영속성 컨텍스트에서 업데이트되기 전에 실행됩니다. 즉, 엔티티의 데이터가 변경되어 데이터베이스에 저장되기 전에 호출됩니다.
   - 이 어노테이션을 사용하여 엔티티가 업데이트되기 전에 수행해야 할 로직을 정의할 수 있습니다.

 

ChronoUnit.MINUTES 대신 ChronoUnit.SECONDS를 사용했다면 초까지만 저장이 된다.