[SPRING] JPA Auditing

라미·2024년 2월 26일
0

spring

목록 보기
11/17
post-thumbnail

JPA Auditing

클래스마다 생성,변경 시간이 필요하다면? 클래스마다 쫒아다니면서 코드 수정이 불가피하다! 너무나 힘든일!!

JPA가 제공하는 Auditing 기능을 사용하면 자동으로 생성, 변경 시간을 추가해준다고 한다.

🐥 시간을 저장할 클래스 생성

@Getter
@MappedSuperclass //jpa entity 클래스들이 해당 클래스를 상속할 경우 해당클래스에 있는 멤버 변수를 column으로 인식한다!
@EntityListeners(AuditingEntityListener.class) // 해당 클래스에 Auditin 기능을 추가시켜준다
public abstract class Timestamped { // 추상클래스가 아니어도 상관은 없다 하지만 얘 자체를 객체로 쓸 일은 없기때문에 abstrat로 해준다

    @CreatedDate // Entity 객체가 생성될때 자동으로 저장된다
    @Column(updatable = false) // 최초 생성값만 저장하기 위에 updatable = false 로 update 되지 않도록 한다.
    @Temporal(TemporalType.TIMESTAMP) // 날짜 데이터를 매핑할때 사용하는 어노테이션
    private LocalDateTime createdAt;

    @LastModifiedDate // 조회한 Entity 객체의 값을 변경할 때 변경 된 시간이 저장된다
    @Column
    @Temporal(TemporalType.TIMESTAMP)
    private LocalDateTime modifiedAt;
}

각 어노테이션의 기능은 예시코드 주석 참고

🐥 사용할 entity 클래스에 상속

@Entity // JPA가 관리할 수 있는 Entity 클래스 지정
@Getter
@Setter
@Table(name = "memo") // 매핑할 테이블의 이름을 지정
@NoArgsConstructor
public class Memo extends Timestamped{ //timstamped를 상속받아 createdAt, modifiedAt 가지게 된다
//코드생략
}

🐥 main appliction 자바 파일 @EnableJpaAuditing 으로 jpaAuditing 사용할 것인거 알리기!(가장중요)

@EnableJpaAuditing // 이게 있어야 지 jpaAuditing 기능을 사용할 수 있다
@SpringBootApplication
public class MemoApplication {

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

🐥 MemberResponseDto.java 클래스에 새로운 필드 추가! (auditing 기능으로 entity에 추가된 필드)

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


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

이렇게 하면 아주 편하게 생성, 수정 시간 저장을 사용할 수 있다!!!

0개의 댓글