Persistent Object
참조 : Hibernate In Action 4.1.2 Persistent Obejct
Persistent Maneger(Hibernate의 Session)에 의해 save()가 호출된 객체 or 이미 Persistent Manager와 연관이 있는 Persistent 객체에 의해 참조된 객체. <= persistent instances are always associated with a Session and are transactional.
Persistent 객체는 트랜잭션이 끝날 때 까지 DB와 동기화된다. 트랜잭션이 커밋될 때 메모리에 있던 객체의 상태가 SQL쿼리를 이용해서 DB로 보내진다. 이런 처리는 트랜잭션이 끝날 때가 아니더라도 발생할 수 있다.
"new"라는 상태는 Persistent 객체가 주키를 가졌지만 아직 DB에 들어가지 않은 상태다. 동기화가 발생하기 전까지 "new"상태가 유지된다.
automatic dirty checking 은 트랜잭션 내에서 어떤 Persistent 객체가 수정이 되었는지 찾아내는 ORM 소프트웨어의 전략이다. 하이버네이트는 애플리케이션에서 안보이게(transparent) persistent 상태의 변화를 가능한한 나중에 DB에 반영을 하는데 이것을 transparent transaction-level write-behind 라고 한다.
하이버네이트는 어떤 속성이 변했는지 알 수 있으며 따라서 특정 컬럼만 update하는 것이 가능하다. => 이래서 1-7. 레코드 update하기 에서 session.update(pizza);를 하지 않아도 가능 했던것 같습니다.
delete()를 호출하게 되면 DB table에서 객체에 해당하는 row가 삭제 되며 transient 객체가 된다.