JPA Auditing으로 생성시간/수정시간 자동화하기
domain 패키지에 BaseTimeEntity 클래스를 생성한다.
이 클래스는 모든 Entity의 상위 클래스가 되어 Entity들의 createdDate, modifiedDate를 자동으로 관리한다.
@Getter
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public abstract class BaseTimeEntity {
@CreatedDate
@Column(updatable=false)
private String createdDate;
@LastModifiedDate
private String modifiedDate;
@PrePersist
public void onPrePersist(){
this.createdDate = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy.MM.dd HH:mm"));
this.modifiedDate = this.createdDate;
}
@PreUpdate
public void onPreUpdate(){
this.modifiedDate = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy.MM.dd HH:mm"));
}
}
@MappedSuperclass
JPA Entity 클래스들이 BaseTimeEntity를 상속할 경우 필드들(createdDate, modifiedDate)도 칼럼으로 인식하도록 함
@EntityListeners(AuditingEntityListener.class)
BaseTimeEntity 클래스에 Auditing 기능을 포함시킴
@CreatedDate
Entity가 생성되어 저장될 때 시간이 자동 저장
@LastModifiedDate
조회한 Entity의 값을 변경할 때 시간이 자동 저장
@PrePersist로 해당 엔티티를 저장하기 이전에 createdDate를, @PreUpdate로 해당 엔티티를 업데이트 하기 이전에 modifiedDate를 갱신시켰다.
이 때, String 타입으로 원하는 format을 지정해줬다.
public class Posts extends BaseTimeEntity {
...
}
이제 이 기능이 필요한 클래스들이 BaseTimeEntity를 상속받게한다.
@EnableJpaAuditing
@SpringBootApplication
public class ProjectmateApplication {
public static void main(String[] args) {
SpringApplication.run(ProjectmateApplication.class, args);
}
}
JPA Auditing 어노테이션들을 모두 활성화할 수 있도록 Application 클래스에 @EnableJpaAuditing 어노테이션을 추가한다.
'BACK > SPRING' 카테고리의 다른 글
Spring Boot Project(6) - 댓글, 대댓글 (0) | 2023.01.24 |
---|---|
Spring Boot Project(5) - 게시글 페이징, 필터링하기 (0) | 2023.01.24 |
Spring Boot Project(3) - 게시글 CRUD (0) | 2023.01.24 |
Spring Boot Project(2) - 프로젝트 세팅, MySQL 연동하기 (0) | 2023.01.24 |
[Spring] 컴포넌트 스캔 / @Autowired (0) | 2023.01.17 |