확장 된 영구 컨텍스트를 사용하고 있습니다. 객체에 대해 일대 다 관계를 지연로드 할 수 있고 또한 "병합"하기 전에 SELECT가 필요하지 않기 때문에 지속 컨텍스트 persistent context를 가진 객체.JPA/Hibernate 쿼리가 부실 결과를 반환합니다.
내가 가진 DummyObject 있습니다
A "최근 업데이트"날짜 필드를
이 개체는 모든 5 업데이트되는
한 많은 관계 초 단위로 em.merge(DummyObject)
호출. 다른 JVM에서
em.createQuery("from DummyObject").getResultList();
같은 통화를하고 쿼리.
문제는 Hibernate가 올바른 SQL 문 (로그온 할 때 문이있을 때)과 데이터베이스가 생성 되어도 연속적인 호출 이후에 쿼리의 결과가 모두 첫 번째 쿼리의 타임 스탬프를 가지고 있다는 것입니다 업데이트를 올바르게 받고 있습니다 (확인했습니다).
@Version을 사용하여 모든 종류의 낙관적 잠금을 사용하지 않으려 고 시도했습니다.
- 내가 나를 게으르게 ONE-많은로드를 허용하지 않습니다 TRANSACTIONAL (무언가에 PersistentContextType을 변경 : 다른 것은 때이 제대로 작동 않는다는 것입니다
을 (설명 참조) 관계)
위의 쿼리를 수행하기 전에 EntityManager.clear() 호출을 수행합니다. 날 편애로로드 관계).
왜 내 쿼리가 부실 데이터를 반환합니까? 아니요 두 번째 수준의 캐싱 또는 쿼리 캐싱을 사용할 수 있습니다.
내가 잘못 했나요? query.setHint (,)를 통해 설정할 수있는 것이 있습니까?
은 어쩌면 내가 제대로 TRANSACTIONAL 대 " 는 확장"이해가 안 돼요.
은 버전으로 매핑 된 마지막 업데이트입니까? – Surya
방금 해봤습니다. 작동하지 않았다. 또한 명시적인 "버전"필드를 추가하고 @Version으로 주석을 달아 보았습니다. 또한 작동하지 않았다. – systemoutprintln
은 lastUpdated를보고있는 equals 및 hashcode입니까? em.createQuery() 결과에 속하지 않는 추가 객체가 보입니까? – zmf