[SPRING] 최대 절전 모드 및 스프링을 사용하여 낙관적 인 잠금 구현
SPRING최대 절전 모드 및 스프링을 사용하여 낙관적 인 잠금 구현
낙천적 인 업데이트 상황을 피하기 위해 낙관적 인 잠금을 구현하려고합니다. 내 응용 프로그램에서는 두 사용자가 동일한 레코드를 가져오고 첫 번째 사용자가 일부 변경 사항을 업데이트합니다. 이 변경 사항은 동일한 레코드를 보는 두 번째 사용자에게는 보이지 않으며 사용자가 직접 변경하고 업데이트합니다. 이로 인해 첫 번째 사람이 변경됩니다. 이것을 방지하기 위해 다음을 작성했지만 여전히 문제는 지속됩니다. 나는이 개념을 처음 접했고 문제를 식별 할 수 없었다.
나는 이것을 문서 11.3.4에서 읽으려고 노력했다. 자동 버전 관리 섹션 사용자 정의.
미리 감사드립니다.
해결법
-
==============================
1.JPA / Hibernate Optmistic 잠금은 일부 필드를 사용하여 최종 수정 된 버전 (예 : 타임 스탬프, 긴)을 저장 한 다음 세션의 엔티티 버전을 데이터베이스의 엔티티와 비교하여 변경 사항을 저장할 수 있는지 확인합니다.
JPA / Hibernate Optmistic 잠금은 일부 필드를 사용하여 최종 수정 된 버전 (예 : 타임 스탬프, 긴)을 저장 한 다음 세션의 엔티티 버전을 데이터베이스의 엔티티와 비교하여 변경 사항을 저장할 수 있는지 확인합니다.
이 기능을 사용하려면 엔티티에 @Version 주석이 달린 필드가 있어야합니다.
아래 예제를 참조하십시오.
http://www.javacodegeeks.com/2012/11/jpahibernate-version-based-optimistic-concurrency-control.html
웹 응용 프로그램에서이 작업을 수행하려면 두 사람이 같은 엔티티를 편집 용으로로드 한 다음 나중에 편집을 제출하는 것처럼 더 오래 생각할 필요가 있습니다. 일종의 장기 실행 세션을 사용하지 않는 한 엔티티 편집중인 것은 양식 제출시 데이터베이스에서 다시로드되고 채워지고 저장됩니다.
예 : 리비전 1의 엔티티
이렇게 작동하려면로드 된 시점에 엔티티 개정을 저장하는 양식으로 숨겨진 필드를 제출할 수 있습니다. 따라서 위의 마지막 단계에서 사용자 1이 제출하면 개정 필드가 1로 설정되고 DB의 레코드가 r2와 같으므로 업데이트가 실패합니다.
from https://stackoverflow.com/questions/19454003/implementing-optimistic-lock-using-hibernate-and-spring by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 사용자 권한 부여 된 권한은 항상 : ROLE_ANONYMOUS입니까? (0) | 2019.01.02 |
---|---|
[SPRING] 의도적으로 Spring 빈을 null로 설정 (0) | 2019.01.02 |
[SPRING] 스프링 자바 설정을 사용하여 싱글 톤 빈으로 프로토 타입 객체 생성하기 (0) | 2019.01.02 |
[SPRING] JsonMappingException : 프록시를 초기화 할 수 없습니다 - 세션 없음 (0) | 2019.01.02 |
[SPRING] Spring OAuth2 토큰 엔드 포인트에 대한 요청 당 액세스 토큰 생성 (0) | 2019.01.02 |