2011-12-14 3 views
3

JPA 구현 자 (예 : Hibernate)는 지속성 컨텍스트에 연결된 엔티티를 모니터링하고 엔티티의 필드가 변경되면 변경 사항이 데이터베이스로 업데이트됩니다.JPA 더티 검사

제 질문은 JPA가 변경 사항을 어떻게 추적합니까? 엔터티는 (대리인에 의해) 가로 챌 수 없으므로 "세터"의 가로 채기가 확실하지 않습니다. 어떻게 수행됩니까?

"더티 검사"기능의 구현 세부 사항에 관심이 있습니다.

답변

7

이들은 모두 이며, 구현은 모두에 종속적입니다 (예 : JPA 사양이 여기에 도움이되지 않습니다).

일부 구현 (예 : DataNucleus, OpenJPA)은 바이트 코드 향상 기능을 사용하며로드 이후 더러운 필드를 효율적으로 관리 할 수 ​​있으며 원본 필드 값의 스냅 샷을 유지할 필요가 없습니다.

다른 구현은 이전 값의 일부 값 (또는 데이터 저장소와의 비교를 통해)과 비교해야합니다.

5

로드 된 엔티티의 스냅 샷을 만들고,이 스냅 샷을 메모리에 보관하고, 플러시 시간에 엔티티의 스냅 샷을 현재 상태와 비교합니다. 상태가 다르면 엔티티를 업데이트해야합니다. 일치하는 경우에는 안됩니다.

0

그 동안 최대 절전 모드는 더티 검사 옵션을 확장했다는 것을 유의하십시오. Hibernate는 이제 바이트 코드 도구와 커스텀 dirty checking 옵션을 지원한다. 이 새로운 옵션에 대한 자세한 내용은 this link을 참조하십시오.

관련 문제