일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- spring boot
- MYSQL
- fractional seconds
- 운동해서 광명찾자
- deserializer
- 오블완
- https
- yml
- pooled-lo
- 1*1000
- load order
- MSSQL
- mysql not equal null
- sendFractionalSeconds
- getDateCellValue
- mysql equal null
- AuditingEntityListener
- 티스토리챌린지
- getEntityGraph
- EmbeddedId
- NamedEntityGraph
- +9:00
- apatch poi
- createEntityGraph
- 버전 문자열 비교
- RootGraph
- @CreateDate
- @EntityListeners
- mysql =
- Protecle
- Today
- Total
Hello
[JPA] JPA Auditing이란 (+Spring Data JPA Auditing) 본문
Auditing는 '감사하다' 의미를 갖고 있습니다. 엔티티의 시간 데이터가 변경돨 때마다 입력/수정 코드를 구현해야한다. 하지만, JPA Auditing를 사용해 공통으로 처리할 수 있습니다.
1. 표준 JPA를 사용해 구현하는 방법
2. Spring Data JPA를 사용해 구현하는 방법
표준 JPA를 사용
JPA에는 Auditing(감사) API가 명시적으로 포함되어 있지 않지만, 엔터티 수명 주기 이벤트를 사용하여 이 기능을 구현할 수 있습니다. + https://www.baeldung.com/jpa-entity-lifecycle-events
@PrePersist, @PreUpdate 등 jpa 엔티티 수명 주기 이벤트를 목적에 맞게 사용할 수 있습니다.
콜백 메서드는 항상 void를 반환해야 하며 인수를 받으면 안됩니다. 모든 이름과 액세스 수준을 가질 수 있지만 static 이어서는 안 됩니다.
import jakarta.persistence.*;
import java.time.LocalDateTime;
@Entity
@Table(name = "tb_test_date")
public class TestDate {
private Integer id;
private LocalDateTime createDate;
private LocalDateTime modifiedDate;
...
@PrePersist
@PreUpdate
public void onRegDate() {
LocalDateTime now = LocalDateTime.now();
this.createDate = now;
this.modifiedDate = now;
}
}
JPA는 콜백 리스너 클래스를 지정하기 위해 @EntityListeners 어노테이션을 제공합니다.
auditing을 여러 클래스에 추가해야하는 경우 @EntityListeners를 사용해 코드를 중앙 집중화 할 수 있습니다.
@EntityListeners(AuditListener.class)
@Entity
public class TestDate { ... }
public class AuditListener {
@PrePersist
@PreUpdate
@PreRemove
private void onAudit(Object object) { ... }
}
Spring Data JPA를 사용
Spring Data JPA는 표준 JPA에 추가 추상화 계층을 추가하여 JPA를 확장하는 프레임워크입니다. 이 계층은 Spring JPA 저장소 인터페이스를 확장하여 JPA 저장소 생성을 지원합니다.
CRUD 작업을 위한 인터페이스 인 CrudRepository<T, ID>를 확장할 수 있습니다. 저장소를 생성하고 다른 구성 요소에 주입해 Spring Data는 자동으로 구현을 제공하고 감사 기능을 추가할 준비가 됩니다. 엔티티의 생성시각, 수정시각, 생성한 사람, 수정한 사람을 기록할 수 있습니다.
@EntityListeners에 Spring Data JPA가 제공하는 엔터티 리스너 클래스인 AuditingEntityListener를 지정해 auditing을 등록할 수 있습니다.
Spring Data JPA 1.5이후 버전부터는 Java 구성을 통해 auditing을 활성하는 방법. +spring docs
@SpringBootApplication
@EnableJpaAuditing
public class TestDateApplication {
public static void main(String[] args) {
SpringApplication.run(TestDateApplication.class, args);
}
}
@CreatedDate, @LastModifiedDate를 사용해 등록일, 수정일을 자동으로 설정합니다.
import jakarta.persistence.*;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import java.time.LocalDateTime;
@Entity
@Table(name = "tb_test_date")
@EntityListeners(AuditingEntityListener.class)
public class TestDate {
private Integer id;
private LocalDateTime createDate;
private LocalDateTime modifiedDate;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
@Column(name = "create_date")
@CreatedDate
public LocalDateTime getCreateDate() {
return createDate;
}
public void setCreateDate(LocalDateTime createDate) {
this.createDate = createDate;
}
@Column(name = "modified_date")
@LastModifiedDate
public LocalDateTime getModifiedDate() {
return modifiedDate;
}
public void setModifiedDate(LocalDateTime modifiedDate) {
this.modifiedDate = modifiedDate;
}
}
@CreatedBy, @LastModifiedBy를 사용하는 방법은 추후 Spring Security를 적용해 정리하도록 할 예정입니다.
참고 :
baeldung에는 hibernate auditing사용 방법도 정리 되어 있습니다.
'java' 카테고리의 다른 글
[JPA] PK가 아닌 컬럼을 사용하여 연관관계 설정 (0) | 2024.01.03 |
---|---|
점으로 구분된 버전 문자열 비교 (0) | 2023.12.06 |
[Jackson] JsonSerializer, JsonDeserializer 커스텀하게 사용하는 방법 (0) | 2023.11.08 |
Java MultipartFile to String (0) | 2023.10.25 |
[JPA] 일대일 조인 테이블 @EmbeddedId 사용 (0) | 2023.10.12 |