나는 최대 절전 모드의 낙관적 잠금 (전용 버전 방식)에 대해 궁금해한다. 현재 트랜잭션이 커밋되기 전에 버전을 확인한다는 내용의 최대 절전 모드 소스 코드를 확인했지만, 쿼리가 끝난 후 다른 트랜잭션이 커밋 된 경우 DB의 버전 열 (매우 짧은 시간 간격)에서 현재 트랜잭션은 변경 사항이없는 것으로 간주하므로 이전 트랜잭션이 잘못 대체됩니다. 이러한 경우에 가능한최대 절전 모드 낙관적 잠금 메커니즘
EntityVerifyVersionProcess.java
@Override
public void doBeforeTransactionCompletion(SessionImplementor session) {
final EntityPersister persister = entry.getPersister();
if (!entry.isExistsInDatabase()) {
// HHH-9419: We cannot check for a version of an entry we ourselves deleted
return;
}
final Object latestVersion = persister.getCurrentVersion(entry.getId(), session);
if (!entry.getVersion().equals(latestVersion)) {
throw new OptimisticLockException(
object,
"Newer version [" + latestVersion +
"] of entity [" + MessageHelper.infoString(entry.getEntityName(), entry.getId()) +
"] found in database"
);
}
}
입니까?
DB 도메인 전문가가이 문제에 도움이되기를 바랍니다.
감사합니다.
이렇게하면 깨지거나 쓸모 없게됩니다. 아주 좋은 광고는 "낙관적 인 잠금을 사용합니다. 보통 데이터를 손상시키지 않습니다!". – Kayaman
흠, 실제로 그것은 중복 질문이라고 생각하지 않습니다. 그 질문은 낙관적 인 잠금 메커니즘에 관한 것입니다. 그러나 저는 아닙니다 ... – user2015063
당신은 뭘하지 않았습니까? 그것은 당신이 말하는 것과 똑같은 것 같습니다. 그리고 아니요, 물건을 깰 기회가 없습니다. 낙관적 인 잠금이 실패하면 하나의 트랜잭션이 롤백됩니다. – Kayaman