반응형
Auditing
- JPA 에서 도메인을 RDB 테이블에 매핑할 때, 도메인들이 공통으로 가지고 있는 필드들 존재
생성일자, 수정일자, 생성자, 수정자 등
- JPA 에서 Audit 기능 제공
- Spring Data JPA 에서 시간 값을 자동으로 넣어줌
Auditing 예시 코드
build.gradle 에 의존성 추가
dependency {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
}
스프링 부트에서 gradle 로 의존성을 관리한다면
spring-boot-starter-data-jpa 만 추가해주면 된다.
BaseTimeEntity.java
@Getter
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public abstract class BaseTimeEntity {
@CreatedDate
@Column(updatable = false)
private LocalDateTime createdAt;
@LastModifiedDate
private LocalDateTime modifiedAt;
}
각 어노테이션의 역할은 아래와 같다 ⬇️
@MappedSuperclass
- 객체에서 공통 매핑 정보가 필요할 때 사용
- 공통 매핑 정보가 필요할 때, 부모 클래스에 선언하고
- @MappedSuperclass 를 사용하면 속성만 상속받아서 사용할 수 있다.
EntityListeners(AuditingEntityListener.class)
- 해당 클래스에 Auditing 기능을 포함
@CreateDate
- Entity 가 생성되어 저장될 때 시간이 자동 저장
@LastModifiedDate
- 조회한 Entity 의 값을 변경할 때 시간이 자동 저장
JPA Auditing 활성화
- 스프링부트 어플리케이션 클래스에서 JpaAuditing 기능을 활성화해줘야 한다.
@EnableJpaAuditing // 이거 추가 !
@SpringBootApplication
public class ApiApplication {
public static void main(String[] args) {
SpringApplication.run(ApiApplication.class, args);
}
}
예시 코드
- 모든 엔티티에 생성시간과 수정시간을 공통으로 추가하고 싶은 상황
- 아래와 같이 BaseEntity 를 정의해서 사용할 수 있다.
@Entity
@Getter
public class Member extends BaseTimeEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String username;
private String password;
// private LocalDateTime createdAt;
// private LocalDateTime modifiedAt;
}
BaseTimeEntity 를 상속받으면 주석 처리된 부분이 포함된 것과 마찬가지 효과.
추가로 생성 시간과 수정 시간이 자동으로 적용된다 !
728x90
반응형