2013-06-08 5 views
0

최대 절전 모드 트랜잭션을 열고 개체를 읽었습니다. 가게가없는 물건의 일부 속성을 변경했습니다. 나는 DB에 저장되어있는 원래의 특성을 얻을 수 있지만, getSession().get(id)동일한 트랜잭션에서 최대 절전 모드로 DB에 저장된 원래의 개체 속성 가져 오기

Criteria cr = new Criteria(...); 
cr.add(Restrictions.eq("id", id)); 
cr.setProjection(Projections.property("someProperty")); 
cr.uniqueResult(); 

또는 다시로드 전체 개체와 함께하고 싶습니다. 그러나 결과적으로 속성이 변경되었고 전체 개체를 다시로드하면 변경된 개체와 동일한 인스턴스가 생성됩니다. 동일한 트랜잭션으로 DB에 저장된 원래의 객체 속성을 얻는 방법, 변경된 객체는 변경된 속성으로 유지되어야합니다. Spring 트랜잭션 주석으로 어떻게 수행 할 수 있습니까?

답변

0

session.refresh() 메소드를 사용할 수 있습니다. 문서 참조 : http://docs.jboss.org/hibernate/orm/4.1/manual/en-US/html_single/#objectstate-loading

하지만 변경 사항을 덮어 씁니다. refresh 전에 개체를 복제 할 수 있습니다.

+0

어떻게 개체를 저장 하시겠습니까? – Nawa

+0

어떤 객체입니까? 복제 된 객체를 지속 시키려면'DETACHED' 상태가되기 때문에'entityManager.merge (clonedObject)'를 호출해야합니다. – lunr

+0

그런데 영구 객체에 대한 모든 변경 사항은 트랜잭션을 커밋 할 때 데이터베이스에 반영됩니다. 필요한'insert' 문과'update' 문은 Hibernate에 의해 자동으로 호출됩니다. 따라서 직접 저장하지 않아도됩니다. – lunr