JPA는 1차 캐싱와 쓰기 지연을 지원한다.
1차 캐시는 엔터티 매니저에 의해 관리되고 있는 것들을 저장하여
데이터를 찾고자 할 때 새로 쿼리를 날리지 않아도 JPA가 저장하고 있는 캐시에서 찾아올 수 있도록 한다.
이것은 데이터를 수정할 때도 유용하다.
엔터티 매니저가 관리하고 있는 엔터티의 일부 인스턴스를 수정하면
JPA가 이를 자동으로 감지하여 수정 쿼리를 날릴 수 있다.
이를 더티 체킹이라고 한다.
더티 체킹의 특징은 다음과 같다.
JPA 에서 엔터티는 다음과 같은 생명주기를 가진다.
여기서 트랜잭션으로 동작하는 로직에서 Managed 상태에 있는 엔터티를 수정하면 Dirty checking 이 발동한다.
(물론 쓰기 지연 때문에 로직의 끝에서 한꺼번에 수정이 일어난다. 이는 쿼리 수를 줄이기 위함이다.)