2014-12-30 1 views
0

엔티티를 최초로 읽어 들일 필요가있다. 즉, 먼저 session.load()를 사용하여 엔티티를 읽습니다. 실패하면 session.get()을 사용합니다. 엔티티가 get()을 사용하여 세션에서 처음 읽혀지면 잠금으로 표시됩니다 (잠금은 일시적인 속성이고 DB에는 유지되지 않음). 다음 번엔 session.load()를 호출 할 때 DB에서 다시 검색하는 대신 캐시에서 잠긴 것으로 표시된 엔터티를 가져올 것이라고 가정합니다. 그러나 이것은 일어나지 않습니다. session.load()는 항상 실패하고 session.get()을 사용하기 위해 catch 블록으로 이동합니다. 내 이해가 잘못된 부분을 잘 모르겠습니다. 어떤 도움을 주시면 감사하겠습니다. 또한 이것을 달성하기위한 더 좋은 방법이 있다면 나에게 제안하십시오.캐시로부터 Hibernate 세션의 엔티티를로드한다.

 entity= service.load(id); 
     try{ 
      entity.getBookingNo(); 
     }catch(LazyInitializationException e){ 
      entity= service.getById((id)); 
     } 
     if(entity.getLock()){ 
      return "Record locked by another user"; 
     } 
     entity.setLock(true); 
+0

load()는 프록시 객체를 가져옵니다. 엔터티 메서드에 액세스 할 때 개체가 DB 예외에있는 경우 throw됩니다. – Zeus

답변

0

나는 위에서 사용한 전략이 다중 사용자 또는 클러스터 환경에서 작동하지 않는다고 생각합니다.

데이터베이스 레벨 잠금을 데이터에 적용 할 수있는 Hibernate Pessimistic locking을 사용해야합니다.