2014-07-09 2 views
1

내 애플리케이션의 일부 엔티티가 특정 트랜잭션의 범위 동안 잠글 필요가 있습니다. 트랜잭션에 참여하는 모든 엔티티를 잠글 필요가 있으며 DAO에서 엔티티를 잠그기위한 특별한 방법을 만들고 싶지 않습니다. 스프링의 선언적 트랜잭션을 사용하고 해당 메서드 호출에 대한 격리 수준을 설정했지만 데이터가 생성 된 SQL 쿼리를 가져올 때 SELECT SELECT FOR UPDATE가 아닌 일반 SELECT입니다. 최대 절전 모드에서 트랜잭션의 각 참여 엔티티에 대한 잠금을 수동으로 지정해야합니까? 트랜잭션 격리로 제어하지 않아야합니까? hibernate 세션에서 잠금 모드를 UPDATE로 설정하면 올바른 쿼리를 볼 수 있습니다. 즉, 이미 격리를 지정 했음에도 불구하고 수동으로 잠금을 지정해야한다는 의미입니다.Spring Hibernate 비관적 잠금

최고

+0

도움이 될 그러니이 정말 까다로운 질문 또는 매우 깊은입니다! :디 – maxsap

답변

0

예. 격리 수준과 잠금은 다른 점이며 잠금이 트랜잭션 격리로부터 제어되지 않음을 보장합니다. Additionallky ​​나는 당신에게 아주 좋은 이유가 없다면 격리 수준으로하지 않는 충고를 원할 것입니다.

선택한 엔터티에 SELECT ... FOR UPDATE를 적용하기 위해 쿼리 할 때 비관적 잠금을 사용해야합니다.

이 당신에게

Spring Pessimistic locking