복붙노트

[SPRING] 최대 절전 모드 및 스프링을 사용하여 낙관적 인 잠금 구현

SPRING

최대 절전 모드 및 스프링을 사용하여 낙관적 인 잠금 구현

낙천적 인 업데이트 상황을 피하기 위해 낙관적 인 잠금을 구현하려고합니다. 내 응용 프로그램에서는 두 사용자가 동일한 레코드를 가져오고 첫 번째 사용자가 일부 변경 사항을 업데이트합니다. 이 변경 사항은 동일한 레코드를 보는 두 번째 사용자에게는 보이지 않으며 사용자가 직접 변경하고 업데이트합니다. 이로 인해 첫 번째 사람이 변경됩니다. 이것을 방지하기 위해 다음을 작성했지만 여전히 문제는 지속됩니다. 나는이 개념을 처음 접했고 문제를 식별 할 수 없었다.

나는 이것을 문서 11.3.4에서 읽으려고 노력했다. 자동 버전 관리 섹션 사용자 정의.

미리 감사드립니다.

해결법

  1. ==============================

    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와 같으므로 업데이트가 실패합니다.

  2. from https://stackoverflow.com/questions/19454003/implementing-optimistic-lock-using-hibernate-and-spring by cc-by-sa and MIT license