클래스마다 생성,변경 시간이 필요하다면? 클래스마다 쫒아다니면서 코드 수정이 불가피하다! 너무나 힘든일!!
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();
}
}
이렇게 하면 아주 편하게 생성, 수정 시간 저장을 사용할 수 있다!!!