JPA Auditing은 JPA를 이용하여 엔티티를 저장, 수정, 삭제할 때, 자동으로 생성일(createdDate)과 수정일(modifiedDate)을 처리하는 기능을 제공합니다. JPA Auditing을 사용하면, 엔티티 객체를 생성하거나 수정할 때 자동으로 생성일과 수정일을 설정할 수 있습니다.
@Getter
@MappedSuperclass // JPA Entity 클래스들이 BaseTimeEntity를 상속할 경우 필드들도 (createData, modifiedDate)칼럼으로 인식하도록할 것
@EntityListeners(AuditingEntityListener.class) // Auditing 기능을 포함
public abstract class BaseTimeEntity {
@CreatedDate // Entity가 생성되어 저장될 때 자동저장
private LocalDateTime createdDate;
@LastModifiedDate // 변경될 때 자동저장
private LocalDateTime modifiedDate;
}
위 코드에서 @MappedSuperclass
애노테이션을 사용하여 BaseTimeEntity 클래스를 상속하는 모든 엔티티 클래스가 createdDate
와 modifiedDate
필드를 상속받아 칼럼으로 인식하도록 설정하였습니다.
또한, @EntityListeners
애노테이션을 사용하여 AuditingEntityListener 클래스를 빈으로 등록하고, 엔티티 클래스에 생성일과 수정일을 저장할 필드를 추가하여, @CreatedDate
와 @LastModifiedDate
애노테이션을 사용하여 자동으로 처리하도록 설정하였습니다.
아래에서 BaseTimeEntity를 상속 받는 User엔티티를 예시로 들어보겠습니다.
@Entity
public class User extends BaseTimeEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(nullable = false, length = 100)
private String name;
@Column(nullable = false, length = 100)
private String email;
}
위 예시에서 User 클래스는 BaseTimeEntity 클래스를 상속하였으므로, createdDate와 modifiedDate 필드를 자동으로 상속받아 칼럼으로 인식합니다.
이를 통해, User 엔티티를 저장, 수정할 때 자동으로 생성일과 수정일이 처리되며, BaseTimeEntity 클래스에 추가한 createdDate와 modifiedDate 필드를 사용하여 데이터를 저장할 수 있습니다.
예를 들어, User 객체를 저장할 때는 다음과 같이 코드를 작성할 수 있습니다.
@Service
public class UserService {
@Autowired
private UserRepository userRepository;
public void saveUser(User user) {
userRepository.save(user);
}
}
위 코드에서 userRepository.save(user) 메소드를 호출하여 User 객체를 저장할 때, BaseTimeEntity 클래스에서 상속받은 createdDate와 modifiedDate 필드가 자동으로 처리됩니다. 이를 통해, User 엔티티를 저장, 수정할 때 생성일과 수정일을 간단하게 처리할 수 있습니다.
또한, JPA Auditing을 사용하려면 스프링 설정 파일이나 main에서 @EnableJpaAuditing 애노테이션을 추가하여 활성화해야 합니다.
이 애노테이션을 추가하면, JPA Auditing에 필요한 설정을 자동으로 처리해줍니다.
@EnableJpaAuditing // JPA Auditing 활성화
@SpringBootApplication //스프링부트의 자동설정, 스프링 Bean읽기와 생성 모두 자동
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args); //내장 was 실행
}
}
@Configuration
@EnableJpaAuditing
public class JpaConfig {
//...
}
위 코드들에서 @EnableJpaAuditing 애노테이션을 사용하여 JPA Auditing을 활성화하였습니다.
이 애노테이션을 추가하면, Auditing 기능을 사용하기 위한 빈들을 자동으로 생성해줍니다.
또한, AuditorAware 인터페이스를 구현한 빈을 등록하면 자동으로 생성자와 수정자 정보를 설정할 수 있습니다.