2013-10-25 2 views
1

나는 표준 spring/jpa/hibernate 설정을 가지고있다. 각각의 고유 한 EntityManager 인스턴스가 삽입 된 두 개의 다른 DAO를 사용하는 @Transactional을 사용하는 서비스 메소드입니다.Hibernate와 다른 객체 식별자를 가진 Spring과 JPA

쿼리 할 때 궁극적으로 동일한 엔터티 (직접 및 간접적으로 검색되는)는 동일한 동면 세션 (트랜잭션)에 대해 동일한 개체 여야하지만 다른 개체로 표시됩니다.

그래서 내 DAO는 다른 최대 절전 모드 세션을 사용하고 있습니까?

답변

1

최대 절전 모드 세션이 동일해도 개체 ID가 다를 수 있습니다. entityManager.find 메소드를 사용하여 식별자별로 읽는 경우 반환 된 객체는 동일한 세션 (첫 번째 레벨 캐싱)에서 항상 동일합니다. 그러나 JPQL 또는 조건 쿼리를 사용하면 다른 인스턴스 (동일한 데이터 사용)를 얻을 수 있습니다.

+0

설명서를 제공 할 수 있습니까? 나는 같은 하이버 네이트 세션에서 검색되는 한 최대 절전 모드가있는 동일한 데이터베이스 개체에 대해 동일한 개체 ID가 보장된다는 것을 발견 할 수있었습니다. –

+0

이 게시물 만 찾을 수 있습니다. http://apmblog.compuware.com/2009/02/16/understanding-caching-in-hibernate-part-one-the-session-cache/ – gadget

관련 문제