2013-07-11 1 views
0

나는 우리가 구현하려고하는 Hibernate APP를 가지고있다. ZK와 함께 Open Session in View Pattern을 가지고있다. Hibernate는 쓰레드 당 세션을 생성하고 닫는다. 그러나 우리는 다음과 같이 구현하기위한 하나의 세션에서 [criteria와 save 또는 update] 메소드를 가진 severals 연산을 가진다. 업데이트 방법은 우리는 매우 신속하게 다음과 같은 경우 악명 높은보기 병합에서 Java 최대 절전 모드 변경 내용이 손실됩니까?

NONUNIQUEOBJECTEXCEPTION 

우리가 변경 한 update()merge()에 내 질문을 받았다. 나는 Student 클래스를 가지고 update[making sure is not in session avoid the exception]를 사용하여 학생을 업데이트하지만 나중에 다른 방법으로 학생이 요구된다 시도하는 경우

이전 update 다르게 다시 우리가 mergingmerge() 메소드가 호출한다 이번에 업데이트되었습니다. 나는 [flush][commit] 메서드가 첫 번째 학생에게 변경이라고 불리는 때가 궁금한가요? 두 학생의 변경 사항은 괜찮습니까? 무슨 일이야??

처음 변경시 첫 번째 변경 사항은 student입니다. 이 경우 내가 무엇을 할 수 있습니까?

감사합니다.

답변

0

잠금 알고리즘을 살펴 봐야합니다. 인기있는 2 가지가 있습니다 : 낙관적이고 비관적입니다. 웹 응용 프로그램의 경우 낙관적 인 잠금이 일반적으로 더 효과적입니다. 엔티티 객체의 각 리비전에는 버전 레이블 (대개 bigint 또는 문자열 db 열)이 제공됩니다. 누군가 당신의 업데이트를 선점하고 버전이 오래전에 나올 때, 최대 절전 모드는 낙관적 인 락 예외를 던질 것이고, 그 경우 사용자는 무엇을해야 할지를 물어보고 (또는 다른 적절한 조치를 취할 수 있습니다.)

+0

팁 gerrytan에게 감사드립니다 - 면죄증을 의미합니까? – javiut

+0

2 명의 사람들이 동일한 버전의 엔티티 객체를 가져 오는 중 하나는 다른 사람보다 우선적으로 변경 사항을 저장합니다. 다른 사람보다 우선적으로 변경 사항을 저장합니다. 잠금 기법이 유용한 곳입니다. – gerrytan