첫 번째와 두 번째 쿼리 사이의 다른 세션에서 동시 업데이트를 통해 쿼리의 결과 데이터가 변경된 경우 한 tx에서 같은 쿼리를 두 번 수행하면 Hibernate를 사용하여 StaleObjectStateException
을 얻을 수 있습니까?최대 절전 모드 - 쿼리에서 StaleObjectStateException이 발생합니까?
이 시나리오에서는 모든 엔터티에 낙관적 동시성 제어를 사용하고 있습니다.
그래서 이렇게 보입니다.
스레드 1 : 트랜잭션이 시작
스레드 1 : 쿼리 실행 및 키 = 4711
스레드-2 즉, 위해 검색됩니다 : 키 4711과 같은 순서로는, 검색 변경 및 두 번째 스레드에 최선을 다하고됩니다
스레드 -1 : 쿼리가 다시 실행되고 key = 4711로 주문을 반환합니다.
두 번째 쿼리에서 스레드 -1에 StaleObjectStateException
이 표시됩니까?
도움 주셔서 감사합니다.
토마스
답변 해 주셔서 감사합니다. 그동안 나는 당신이 묘사 한 것을 정확히 보여주는 시험을 썼습니다. thread-1이 어떻게해서 두 번째 쿼리를 실행하기 전에 순서를 변경하면 autoflush로 인해 StaleObjectException이 발생합니다. 이것은 실제로 최근 프로젝트에서 발생했으며 처음에는 다소 이상하게 보였습니다. 순서 변경은 부작용 때문이었습니다. – herrwieger