728x90
반응형
source 는 Github 에 있습니다.
spring data jpa 에서 데이터 생성일, 수정일 자동 생성
- spring data jpa 에서 데이터 생성일, 수정일 자동 생성에 대해서 정리했습니다.
- 데이터를 생성하거나 변경할 떄, 매번 컬럼을 생성하고 세팅할 필요 없이 자동으로 하는 방법입니다.
사용방법
@EnableJpaAuditing
- Application 에 @EnableJpaAuditing 를 붙여줘야 합니다.
- Jpa Auditing 를 활성화시키는 annotation 입니다.
- spring data jpa 에서 audit 은 시간을 자동으로 넣어주는 기능입니다.
@EnableJpaAuditing
@SpringBootApplication
public class JpaExampleApplication {
public static void main(String[] args) {
SpringApplication.run(JpaExampleApplication.class, args);
}
}
공통 클래스 만들기
- 아래와 같이 공통 클래스를 만들어줘서 Entity 에서 상속을 받기만 하면 자동으로 생성시간, 수정시간을 세팅하도록 할 수 있습니다.
@MappedSuperclass // Entity 클래스가 BaseTime 을 상속받을 때, createdDate, modifiedDate 를 인식할 수 있도록 하는 설정입니다.
@EntityListeners(AuditingEntityListener.class) // 자동으로 값을 넣어주도록 하는 annotation 입니다.
@Getter
public abstract class BaseTime {
@CreatedDate // 데이터 생성할 때 시간 자동 생성
private LocalDateTime createdDate;
@LastModifiedDate // 데이터 수정할 때 시간 자동 수정
private LocalDateTime modifiedDate;
}
사용 예시
- 아래와 같이 BaseTime 을 상속받기만 해도 자동으로 생성, 수정 시간이 적용됩니다.
@Entity
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@ToString
public class AutoCreateTime extends BaseTime {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Column
private String test;
@Builder
public AutoCreateTime(String test) {
this.test = test;
}
}
테스트
- 테스트 시 주의사항으로는 SpringBootTest 로 테스트 해야하는 것입니다.
- SpringBootTest annotation 을 붙인 이유는 Application 단의 @EnableJpaAuditing 옵션이 동작하기 떄문입니다.
- @DataJpaTest 로 테스트를 했을 때, 에러는 안나지만 자동으로 생성, 수정 시간이 적용되지 않습니다.
@RunWith(SpringRunner.class)
@SpringBootTest
public class AutoCreateTimeRepositoryTest {
@Autowired
private AutoCreateTimeRepository autoCreateTimeRepository;
@Test
public void 생성시간_수정시간_자동생성_확인_테스트() throws Exception {
AutoCreateTime autoCreateTime = AutoCreateTime.builder()
.test("test")
.build();
AutoCreateTime result = autoCreateTimeRepository.save(autoCreateTime);
Assert.assertNotNull(result.getCreatedDate());
Assert.assertNotNull(result.getModifiedDate());
}
}
결론
- 자동으로 생성, 수정 시간을 적용함으로써 신경써야할 것에 대해 덜 신경쓰게 되고 코드도 깔끔해집니다.
reference
'Spring > jpa' 카테고리의 다른 글
jpa @ElementCollection 정리 (0) | 2022.01.17 |
---|---|
@DataJpaTest 정리 (0) | 2021.12.15 |
spring data jpa ID 생성전략에 따른 동작 방식 정리 (0) | 2021.06.22 |
spring data jpa batch insert 정리 (0) | 2021.05.20 |
spring data jpa save, saveAll 비교 (0) | 2021.05.15 |
댓글