반응형
JPA Auditing
Java 표준 ORM 기술 JPA를 사용할 때 데이터 생성일자, 수정일자 등 어떤 테이블이든 공통으로 갖고 있는 컬럼을 관리하기 위해 제공하는 기능입니다. 이 기능을 사용하면 테이블과 매핑하여 데이터 입력 시 자동으로 시간을 관리할 수 있습니다.
BaseTimeEntity 생성
@Getter
@MappedSuperClass
@EntityListeners(AuditingEntityListener.class)
public abstract class BaseTimeEntity {
@CreatedDate
private LocalDateTime createdDate;
@LastModifiedDate
private LocalDateTime updatedDate;
}
@MappedSuperClass : JPA에서 관리하는 Entity 클래스가 해당 추상 클래스를 상속하면 createdDate와 updateDate를 컬럼으로 인식하게 해 줍니다.
@EntityListeners(AuditingEntityListener.class) : 해당 클래스가 Auditing 기능을 포함하게 됩니다.
@CreatedDate : 데이터가 입력될 때 자동으로 시간을 저장해줍니다.
@LastModifiedDate : 데이터의 값이 변경될 때 자동으로 시간을 저장해줍니다.
Article
@Getter
@NoArgsConstructor
@Entity
public class Member extends BaseTimeEntity {
... 내용 생략
}
위처럼 @Enitity로 지정된 클래스가 BaseTimeEntity를 상속받으면 사용 가능합니다.
BoardApplication
@EnableJpaAudithing
@SpringBootApplication
public class BoardApplication {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
마지막으로 해당 프로젝트의 Application 클래스에 @EnableJpaAuditing 어노테이션을 추가함으로써 어플리케이션 내에서 Auditing 기능을 활성화할 수 있습니다.
UserRepositoryTest
@SpringBootTest
public class MemberRepositoryTest {
@Autowired
private UserRepository UserRepository;
@Test
public void insert() {
String userId = "test01";
// 실행 시간보다 전으로 임의 시간 지정
LocalDateTime currentTime = LocalDateTime.of(2022, 2, 14, 0, 0, 0);
User user = User.builder()
.userId(userId)
.userPass("test01")
.userName("test01")
.userEmail("test01@gmail.com")
.build();
userRepository.save(user);
// 11행에서 선언한 currentTime보다 테이블에서 새로 입력된 값의 시간이 뒤인지 확인
assertThat(userRepository.findAll().get(0).getCreatedDate()).isAfter(currentTime);
}
}
Test 클래스를 하나 만들어서 board 테이블에 실행한 시간을 잘 저장했는지 테스트해봅니다.
MySQL Workbench에서 확인한 결과 작성일자와 수정일자이 현재 시간으로 저장된 것을 볼 수 있습니다.
반응형
'Java Web > JPA' 카테고리의 다른 글
[JPA] persistence.xml 작성 예시 (0) | 2022.03.02 |
---|---|
[JPA] 연관 관계 편의 메소드 (0) | 2022.02.28 |
[JPA] 양방향 관계 매핑 @OneToMany, @ManyToOne 그리고 mappedby (1) | 2022.02.16 |
[JPA] findAll 정렬 (0) | 2021.07.23 |
[JPA] JPA란? (0) | 2021.05.13 |