[java] Hibernate Envers를 사용하여 변경 이력을 통해 데이터 수정에 소요된 시간을 측정할 수 있나요?

Hibernate Envers를 사용하여 변경 이력을 추적하려면 먼저 엔티티 클래스에 @Audited 애노테이션을 추가해야 합니다. 이 애노테이션은 해당 엔티티가 감사 추적의 대상이라는 것을 나타냅니다. 그런 다음 감사 로그를 저장할 테이블을 지정하기 위해 hibernate.hbm2ddl.auto 속성을 create 또는 update로 설정해야 합니다.

변경 이력을 통해 데이터 수정에 소요된 시간을 측정하려면 다음과 같이 기존 데이터와 변경된 데이터의 타임스탬프를 사용하여 계산할 수 있습니다.

AuditReader auditReader = AuditReaderFactory.get(entityManager);
List<Number> revisions = auditReader.getRevisions(YourEntity.class, entityId);

if (revisions.size() >= 2) {
    Number firstRevision = revisions.get(revisions.size() - 2);
    Number lastRevision = revisions.get(revisions.size() - 1);
    
    Date firstRevisionDate = auditReader.getRevisionDate(firstRevision);
    Date lastRevisionDate = auditReader.getRevisionDate(lastRevision);
    
    long timeDifferenceMillis = lastRevisionDate.getTime() - firstRevisionDate.getTime();
    long timeDifferenceSeconds = TimeUnit.MILLISECONDS.toSeconds(timeDifferenceMillis);

    System.out.println("Data modification time: " + timeDifferenceSeconds + " seconds");
} else {
    System.out.println("No previous revisions found");
}

위의 코드에서 YourEntity는 변경 이력을 추적하려는 엔티티 클래스를 나타냅니다. entityManager 객체는 Hibernate EntityManager를 사용하여 얻을 수 있습니다.

이렇게 하면 변경 이력을 통해 데이터 수정에 소요된 시간을 측정할 수 있습니다. Hibernate Envers를 사용하면 데이터 변경의 추적과 모니터링이 용이해지므로 데이터 수정의 효율성을 높일 수 있습니다.

참고 문서: