728x90
Auditing 이란, 감시하다 라는 뜻을 가지고 있다.
각 데이터 마다, 누가, 언제 데이터를 생성했고 변경했는지 감시한다는 의미로 사용한다.
엔티티 클래스에는 공통적으로 들어가 있는 필드는 생성일자와 변경일자 같은 것이 있다.
반복적으로 넣어주는 일을 줄이기 위해서 Auditing 기능을 사용한다.
@EnableJpaAuditing 추가
@SpringBootApplication
@EnableJpaAuditing
public class AdvancedJpaApplication {
public static void main(String[] args) {
SpringApplication.run(AdvancedJpaApplication.class, args);
}
}
BaseEntity 만들기
- 코드의 중복을 없애기 위해서는 각 엔티티에 중복으로 들어가게 되는 칼럼을 하나의 클래스로 빼서 작업한다.
@Getter
@Setter
@ToString
@MappedSuperclass // JPA의 엔티티 클래스가 상속받을 경우 자식 클래스에게 매핑 정보를 전달
// 엔티티를 데이터베이스에 적용하기 전후로 콜백 요청 가능 , 엔티티의 auditing 정보를 주입
@EntityListeners(AuditingEntityListener.class)
public class BaseEntity {
@CreatedDate // 데이터 생성날짜를 자동으로 주입
@Column(updatable = false)
private LocalDateTime cratedAt;
@LastModifiedDate // 데이터 수정날짜를 자동으로 주입
private LocalDateTime updatedAt;
}
Product.class 적용
- 부모클래스로 상속을 받는다.
아래 코드처럼 날짜/시간 관련된 객체는 보이지 않으며, 따로 생성한 BaseEntity 클래스만 상속받았다.
@Entity
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Table(name = "product")
public class Product extends BaseEntity{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long number;
@Column(nullable = false)
private String name;
@Column(nullable = false)
private Integer price;
@Column(nullable = false)
private Integer stock;
}
테스트 진행 - 결과확인
@Test
void auditingTest() {
Product product = new Product();
product.setName("펜");
product.setPrice(1000);
product.setStock(500);
productRepository.save(product);
System.out.println(product.getName());
System.out.println(product.getCratedAt());
}
728x90
'Spring > Spring-detail' 카테고리의 다른 글
빌드 관리 도구 ( Gradle / Maven ) (0) | 2022.09.14 |
---|---|
좋은 객체 지향 설계의 5가지 원칙(SOLID) (0) | 2022.09.14 |
JUnit 테스트의 생명주기를 알아보자 (1) | 2022.09.11 |
application.yml 에서 JPA 설정하기 (1) | 2022.09.11 |
Spring Security H2 DB 접근하기 (0) | 2022.09.02 |
댓글