보통 엔티티는 해당 데이터의 생성시간과 수정시간을 포함한다.
그래서 매번 DB에 insert하기 전, update하기 전에 날짜 데이터을 등록/수정하는 코드가 여기저기 들어간다.
// 생성일 추가 코드 예제
public void savePosts() {
...
posts.setCreateDate(new LocalDate());
postsRepository.save(posts);
...
}
이런 단순하고 반복적인 코드가 모든 테이블과 서비스 메서드에 포함되어야 한다고 생각하면 매우 귀찮고 코드가 지저분해진다. 이 문제를 해결할 수 있는 것이 JPA Auditing이다.
적용하기
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public abstract class BaseTimeEntity {
@CreatedDate
private LocalDateTime createdDate;
@LastModifiedDate
private LocalDateTime modifiedDate;
public LocalDateTime getCreatedDate() {
return createdDate;
}
public LocalDateTime getModifiedDate() {
return modifiedDate;
}
}
먼저 BaseTimeEntity 클래스를 만듭니다.
이 클래스는 모든 Entity의 상위 클래스가 되어 Entity 들의 createdDate, modifiedDate를 자동으로 관리하는 역할이다.
- @MappedSuperclass : JPA Entity 클래스들이 BaseTimeEntity를 상속할 경우 필드들(createdDate, modifiedDate)도 칼럼으로 인식하도록 한다.
- @EntityListeners(AuditingEntityListener.class): BaseTimeEntiy 클래스에 Auditing 기능을 포함시킨다.
- @CreatedDate: Entity가 생성되어 저장될 때 시간이 자동 저장된다.
- @LastModifiedDate: 조회한 Entity의 값을 변경할 때 시간이 자동 저장된다.
그리고 Order클래스가 BaseTimeEntity를 상속하도록 한다.
@Entity
@Table(name = "ORDERS")
public class Order extends BaseTimeEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
public Order() {
}
}
마지막으로 JPA Auditing 어노테이션들을 모두 활성화할 수 있도록 Application 클래스에 활성화 어노테이션을 추가한다.
@EnableJpaAuditing
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(CaffeineApplication.class, args);
}
}
- @EnableJpaAuditing: JPA Auditing을 활성화 하기 위한 어노테이션이다.
'Programming > Spring' 카테고리의 다른 글
어노테이션 (0) | 2021.09.17 |
---|---|
[Lombok] @RequiredArgsConstructor 의 득과 실? (0) | 2021.02.05 |
[JPA] find date between 날짜 사이 찾기 (0) | 2021.02.05 |
[JPA] Entity와 Repository의 관계, Repository의 기본 메서드/추가 메서드 (0) | 2021.02.05 |
@Controller와 @RestController의 차이 (0) | 2021.01.31 |