2012-04-01 2 views
0

Hibernate 세션을 사용하여 엔티티를 저장 한 다음 바로 다음 세션의 현재 세션에서이 엔티티를 가져 오는 (즉, 변경 사항이 아직 DB에 기록되지 않은 경우) 세션을 반환하면 객체? 그것은 변화가 있었는지 또한 알고 있기 때문에해야한다고 생각합니다.Hibernate 세션을 이해하려고 시도 중

답변

0

예, 저장된 엔티티보기와로드/쿼리가 일치해야합니다. 가끔씩 쿼리를 수행하면 쿼리가 수행되기 전에 데이터베이스에 대한 모든 미해결 된 변경 사항이 플러시되어 세션이 기본 자동 플러시 모드로 설정된 경우이 일관성을 유지하게됩니다.

또한이 경우 세션은 데이터베이스의 동일한 행을 참조하는 복사본이 아니라 저장된 것과 완전히 동일한 개체를 반환해야합니다.

+0

하지만 AbstractAnnotationAwareTransactionalTests에서 확장되고 트랜잭션으로 표시되는 JUnit 테스트에서 null을 반환합니다. – preslavrachev

+0

엔티티에 대해 "프로빙"하는 방법은 무엇입니까? 쿼리를 사용하고 있습니까? 세션 전에 자동으로 플러시 되었습니까? 쿼리 도움이되기 전에 session.flush()를 호출합니까? – araqnid

+0

간단히 저장하고 플러시 한 후 다음 줄의 세션에서 가져 오려고합니다 ... 그리고 INSERT SQL이 DB로 전송되는 것을 볼 수는 있지만 null을 반환합니다. 테스트가 @Transactional로 표시 될 수 있습니까? – preslavrachev

0

평등과 해시 코드를 구현하는 동안주의해야합니다. Session은 개체 ID로 키가있는 엔터티가있는 큰 해시 맵입니다. 따라서 ID로 객체를 검색하려고하면 동일한 객체를 가져야합니다.

관련 문제