사용자 도구

사이트 도구


java:hibernate:dirty_checking

Hibernate Dirty Checking

주의! : 읽기만 했는데 dirty checking 에 의해 update 발생

  • Hibernate 는 Entity 조회시에 조회한 Entity 의 복제본을 저장하고 이후에 equals로 각 필드를 비교해서 dirty checking 을 한다.
  • 따라서 custom value object를 필드로 사용하는 경우 특히 JPA Converter 사용시에 equals/hashCode 를 올바로 구현하지 않으면 dirty checking 시 복제된 객체의 reference 주소와 entity 필드의 기존 reference 주소를 비교하면서 dirty 상태로 표시되고 이로 인해 update 가 발생할 수 있다.
  • @Embeddable의 경우에는 class 가 아닌 다시 그 각 필드에 대해 equals 를 수행한다. 따라서 @Embeddable 클래스의 각 필드를 구성하는 클래스에 equals/hashCode가 구현돼 있어야 한다.
  • 애초에 Java 에서 불변 객체가 확실한 LocalDate, LocalDateTime 등은 복사하지 않는다고 함.

참조

java/hibernate/dirty_checking.txt · 마지막으로 수정됨: 2022/11/18 15:37 저자 kwon37xi