티스토리 뷰

생성할 때의 시간과 수정할 때의 시간을 저장하는 방법에는 뭐가 있을까?

 

가장 직관적인 방법은 생성할 때와 수정할 때마다 LocalDateTime.now()를 호출해서 직접 setter로 값을 넣어주는 방법이다. 하지만 매번 이런 작업을 하는 것은 여간 귀찮은 일이 아니다.

 

그래서 보통은 @CreatedDate @LastModifiedDate를 사용한다. 

  • CreatedDate : Entity가 생성되어 저장될 때 시간이 자동으로 저장
  • LastModifiedDate : 조회한 Entity의 값을 변경할 때 시간이 자동으로 저장

 

내가 사용하는 Entity에 직접 이 어노테이션을 붙이지 말고, 생성시간과 수정시간만 따로 BaseTimeEntity에 저장해 이 entity를 상속하도록 한다.

 

BaseTimeEntity.java

@EntityListeners(AuditingEntityListener.class)
@MappedSuperclass
@Getter
@Setter
public class BaseTimeEntity {
    @CreatedDate
    @Column(updatable = false)
    private LocalDateTime createdAt;

    @LastModifiedDate
    private LocalDateTime updatedAt;
}
  • @EntityListeners(AuditingEntityListener.class)는 해당 클래스에 auditing 기능을 포함한다는 뜻으로 이 어노테이션을 추가하지 않으면 나중에 데이터를 insert,  update해도 null값만 들어간다.
  • 생성시간은 한번 저장되면 더 이상 수정되지 않으므로 updateable=false를 붙여준다.

 

Todo.java (사용할 엔티티)

public class Todo extends BaseTimeEntity {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer todoId;
    /**
     생략 
    */
   }

 

그리고 마지막으로 놓치기 쉬운 것은 Application클래스위에 @EnableJpaAuditing을 삽입해주어야 한다. 

@SpringBootApplication
@EnableJpaAuditing
public class DemoApplication {

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

}


1. @CreatedDate(생성시간)와 @LastModifiedDate(수정시간)을 이용해 BaseTimeEntity를 생성한다.

2. 내가 사용할 엔티티에 BaseTimeEntity를 상속받는다.
3. application클래스에 @EnableJpaAuditing을 삽입한다.