[하이버네이트 VS JPA] 객체 다루기

JPA를 언젠간 써야 할텐데 아직도 하이버네이트가 그냥 편해서… @_@;; 암튼 이 둘은 객체를 다루는 API가조금 다른데 그걸 정리해둡니다.

 하이버네이트(Session) JPA(EntityManager) 설명 
save() persist()  저장(정확하게는 Pesistent 상태로 변경) 
 get() find()  DB에서 가져오기 
 load()  getReference() 프록시 가져오기 
 delete() remove()  삭제(정확하게는 Deleted 상태로 변경) 
update()  없음  reattach 다시 부착하기(정확하게는 Detached 상태에서 Persistent 상태로 변경) 
 merge() merge()  merge 병합하기(get() 해온 다음에 Detached 객체의 상태를 복사해간다. 
왠지 CRUD가 다 있어 보이지만 사실 아래 두 줄은 Update 관련 API가 아니라 Detached 상태의 객체를 Persistent 상태로 만들기 용 메서드가 뭐 이것들을 이용해서 Detached 상태 객체를 DB에 반영해서 Update 쿼리를 발생시킬 수도 있지만.. 사실 진정한 Update는 API로 존재하지 않는다. 
즉.. Persistent 상태의 객체를 가지고 어떤 속성을 변경했다 치자.. 이때 굳이 어떤 API를 써서 Update 문을 발생시키지 않아도 된다는 것이다. 
Session session = getSession(); 
Transaction tx = session.beginTransaction(); 
Book book = (Book) session.get(Book.class, 12); 
book.setName(“토비의 스프링 3”); 
tx.commit(); 
session.close(); 
저렇게 변경하고 아무것도 실행하지 않는다. 왜일까? 퀴즈닷.

2 thoughts on “[하이버네이트 VS JPA] 객체 다루기”

  1. setName을 호출하고 트랜잭션이 커밋되면서(아니면 세션이 닫히면서?) 자동으로 업데이트가 되는 거 아닌가요? 하이버네이트는 대충 공부해서 쓰다 보니 정확한 답은 모르겠네요. ^^;

Leave a Reply

Your email address will not be published. Required fields are marked *