AbstractEntity는 공통 모듈에서 제공하는 감사 및 소프트 삭제 기능을 포함한 공통 엔티티 추상 클래스입니다.
@Entity
public class Order extends AbstractEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String orderNo;
}@EnableJpaAuditing
@SpringBootApplication
public class OrderServiceApplication {
}Spring Data JPA Auditing을 기반으로 다음 필드가 자동으로 채워집니다.
| 필드 | 설명 |
|---|---|
| createdAt | 생성 일시 |
| createdBy | 생성자 |
| updatedAt | 수정 일시 |
| updatedBy | 수정자 |
동작 방식
@CreatedDate,@LastModifiedDate로 시간 자동 관리@CreatedBy,@LastModifiedBy로 사용자 자동 관리- 사용자 정보는 AuditorAware 구현체에서 제공
- Spring Security Authentication 기반
엔티티 삭제 시 실제 DB 삭제가 아닌 소프트 삭제 방식을 제공합니다.
| 필드 | 설명 |
|---|---|
| deletedAt | 삭제 일시 |
| deletedBy | 삭제자 |
삭제는 delete() 메서드를 호출하여 수행합니다.
public void delete() {
this.deletedAt = LocalDateTime.now();
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
deletedBy(authentication == null ? "SYSTEM" : authentication.getName());
}public class User extends AbstractEntity {
...
public static User create(UserCreateRequest request) {
User user = new User();
user.createBy(request.username());
}
}