22년 08월 15일에 작성된 글
JPA를 사용하면서 DB에 현재 시간을 넣은 방법중 하나는 Hibernate의 어노테이션인 @CreationTimestamp
, @UpdateTimestamp
어노테이션을 사용하는 방법이 있다.
이외에도 Auditing을 사용할 수 있다.
이번 글에서는 @CreationTimestamp
와 @UpdateTimestamp
를 중점으로 확인해보겠다.
@CreationTimestamp
vs @UpdateTimestamp
비교를 위해 다음과 같은 엔티티를 만들고 다음 코드를 실행했다.
@Entity
@Data
public class TestModel {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long testId;
private String name;
@CreationTimestamp
private Timestamp createdTime;
@UpdateTimestamp
private Timestamp checkTime;
}
//실행코드
try {
TestModel test = new TestModel();
// 1
test.setName("Jang");
testRe.save(test);
Thread.sleep(3*1000);
// 2
testRe.save(test);
Thread.sleep(3*1000);
// 3
test.setName("Kim");
testRe.save(test);
Thread.sleep(3*1000);
// 4
Timestamp timestamp = new Timestamp(0);
test.setCrawlingTime(timestamp);
test.setCreateTime(timestamp);
testRepository.save(test);
} catch (InterruptedException e) {
e.printStackTrace();
}
try {
} catch (InterruptedException e) {
e.printStackTrace();
}
다음 코드는 저장을 할 때 DB내에 시간을 저장해준다. 그러나 save를 할 때마다, @CreationTimestamp
이 붙은 createdTime
은 시간값이 변하지 않지만 @UpdateTimestamp
이 붙은 checkTime
은 계속 시간값이 변한다. 하지만 마지막처럼 createdTime
의 경우 Timestamp를 임의로 설정한다면 값이 변한다. 다음표를 참고하자.
흐름 | test_id | create_time | check_tiem | name |
---|---|---|---|---|
1 | 1 | 2022-08-15 18:04:37 | 2022-08-15 18:04:37 | Jang |
2 | 1 | 2022-08-15 18:04:37 | 2022-08-15 18:04:40 | Jang |
3 | 1 | 2022-08-15 18:04:37 | 2022-08-15 18:04:44 | Kim |
4 | 1 | 1970-01-01 09:00:00 | 2022-08-15 18:04:47 | Kim |