본문 바로가기
Spring

Spring 기초 10 (JPA Auditing (시간 받기))

by sehunbang 2024. 1. 21.

1. JPA Auditing 적용하기 (시간 저장하는 )

 

데이터의 생성(created_at), 수정(modified_at) 시간 을 저장합니다.

( e.g 포스팅, 게시글, 댓글 에 시간) 

 

각각의 Entity의 생성 수정 시간을 매번 작성하는건 너무 비효율적입니다.

 

아래 코드처럼 한수 있으나... 

@Column(name = "date_time"......)
private LocalDateTime time;

time = LocalDateTime.now();

 

ENTITIY 가 갯수가 증가하면 작성할 코드가 너무 많아짐.

 

 

그래서 JPA Auditing 적용하기 (시간 저장하는 )!~

 

1. 새로운 객체를 만든다 (TimeStamped.java) (Entitiy 패키지에 넣음).

@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;
}

 

@MappedSuperclass

해당 클래스를 상속할 겨우.

클래스 안에 선언한 멤버 변수를 Column 으로 인식해줌.

 

Entitiy Class 의 상속이라고 보시면 됩니다.

(abstract 하는 이유는 이 클래스/객체 자체를 사용할 일은 없음)

 

 

@EntityListeners(AuditingEntityListener.class) :  Auditing 기능을 포함시킴. 자동으로 시간 넣어주기

 

@CreatedDate : 객체가 생성될때 시간 값이 자동으로 저장.

@Column(updatable = false) : Column 인데 업데이트 안되게.

 

 

@LastModifiedDate : 조회한/변경 된 시간이 자동으로 저장.

 

@Temporal(TemporalType.TIMESTAMP) : java 의 객체 , date ,time ,timestamp 타입들으 가져옴.

 

 

2. 메인 객체 (Main.java)안에 다 @EnableJpaAuditing 넣어주기.

@SpringBootApplication
@EnableJpaAuditing
public class MemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(MemoApplication.class, args);
    }

}

 

3. 원하는 Entity 객체 안에 상속하기 (extends TimeStamped.java)

 

public class Memo extends TimeStamped {

 

4. ResponseDTO 에다가 해당하는 createdAt  modifiedAt 을 넣어주기.

 

public class MemoResponseDto {
    private Long id;
    private String username;
    private String contents;
    private LocalDateTime createdAt;
    private LocalDateTime modifiedAt;

 

생성자에도 setting 해주기

public MemoResponseDto(Memo memo) {
    id = memo.getId();
    username = memo.getUsername();
    contents = memo.getContents();
    createdAt = memo.getCreatedAt();
    modifiedAt = memo.getModifiedAt();
}