
데이터베이스에서 테이블마다 생성일자와 수정일자 칼럼은 필수적으로 있어야 한다고 합니다.
그 이유는 아래 참고 자료에 추가하였습니다.
JPA Auditing?
엔티티마다 생성일자와 수정일자 필드를 추가하면 코드가 중복되기에 JPA Auditing을 사용하여 이를 중복을 제거하고 간편히 추가해 보겠습니다. 여기서 Audit은 검사하다, 감사하다 와 같은 뜻으로 사용됩니다. JPA Auditing은 Spring Data JPA에서 시간에 대해서 자동으로 값을 넣어주는 기능입니다. 이를 이용하면 자동으로 시간을 매핑하여 데이터베이스 테이블에 넣어주게 됩니다.
코드 예시
BaseTimeEntity를 생성하고, 생성일자와 수정일자 필드를 추가합니다.
@Getter
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public class BaseTimeEntity {
@CreatedDate
@Column(updatable = false)
private LocalDateTime createAt;
@LastModifiedDate
private LocalDateTime updateAt;
}
@EnableJpaAuditing
@SpringBootApplication
public class JpaApplication {
public static void main(String[] args) {
SpringApplication.run(JpaApplication.class, args);
}
}
1. @MappedSuperclass : 공통된 매핑 정보가 필요한 경우 사용(생성일자, 수정일자)
2. @EntityListeners(AuditingEntityListener.class) : 해당 클래스에 Auditing 기능 추가
3. @CreatedDate : 엔티티가 생성되어 저장될 때 자동으로 생성시간 저장
4. @LastModifiedDate : 엔티티의 값이 변경되면 자동으로 수정시간 저장
5. @EnableJpaAuditing : JPA Auditing을 활성화
Member가 BaseTimeEntity를 상속받습니다.
@Entity
@Getter @Setter
@RequiredArgsConstructor
@AllArgsConstructor
public class Member extends BaseTimeEntity{
@Id @GeneratedValue
@Column(name = "memberId")
private Long id;
private String name;
private String phoneNumber;
public Member(String name, String phoneNumber) {
this.name = name;
this.phoneNumber = phoneNumber;
}
}
테스트를 위해서 Thread.sleep(1000); 코드를 사용하겠습니다.
@Test
public void findByNameTest() throws Exception{
Member member1 = new Member("영희", "010-1111-1111");
memberRepository.save(member1); //@CreatedDate 동작
Thread.sleep(1000); //1초간 sleep
member1.setName("철수"); //@LastModifiedDate 동작
em.flush();
em.clear();
Member findMember = memberRepository.findById(member1.getId()).get();
System.out.println("findMember.getCreateAt() = " + findMember.getCreateAt());
System.out.println("findMember.getUpdateAt() = " + findMember.getUpdateAt());
}

생성날짜와 수정날짜가 1초 정도 차이 나는 것을 확인할 수 있습니다.
참고자료
When should a database table use timestamps?
First a note, I thought maybe this question belonged in the database exchange, but I think it is more broadly related to a programming solution as a whole than to databases. Will move to database
softwareengineering.stackexchange.com
JPA Auditing 기능이란?
JPA Auditing이란? Java에서 ORM 기술인 JPA를 사용하여 도메인을 관계형 데이터베이스 테이블에 매핑할 때 공통적으로 도메인들이 가지고 있는 필드나 컬럼들이 존재합니다. 대표적으로 생성일자, 수
webcoding-start.tistory.com
'Spring' 카테고리의 다른 글
| [Spring] Build.Gradle 공부하기 (0) | 2023.07.28 |
|---|---|
| [Spring] Swagger 사용하기 (0) | 2023.06.14 |
| [Spring] 쿼리 메서드 기능 이해 및 응용1 (0) | 2023.06.07 |
| [Spring]OSIV와 성능 최적화 (0) | 2023.06.06 |
| [Spring] OneToMany 관계에서 페치 조인 최적화 (0) | 2023.05.03 |
느리더라도 단단하게 성장하고자 합니다!
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!