2011-04-29 4 views
0

내가 내 데이터베이스에 high_scores 테이블이, 두 개의 값이 있습니다. 나는 정말 간단한 코드로 낙관적 인 잠금 재시도 논리를 사용하여 코드를 더럽 히고 싶지 않습니다.최대 절전 모드와 "최대 값 승리"논리

update high_scores 
set highest_score = :new_high_score 
where player_id = :player_id 
and highest_score <= :new_high_score 

나는 또한 사용자가 하나를 가지고 있지 않은 경우 높은 점수를 만드는 방법에 대해 걱정할 필요가 거라고하지만 대부분은, 잘 내 목표를 달성하는 것입니다 : 내가 실행 좋아이라고하는 것은 기본적으로이 라인이다. 높은 점수를 결코 낮은 점수로 덮어 쓰지는 못하도록해야하지만 이는이 테이블을 잠그는 유일한 방법입니다.

이와 같은 작업을 수행하기 위해 최대 절전 모드를 사용하는 방법이 있습니까? 아니면 사용자 지정 SQL을 사용해야합니까?

답변

2

hibernate는 (3.3에서부터) 대량 업데이트를 지원합니다.

편집 :

확인 : http://docs.jboss.org/hibernate/core/3.3/reference/en/html/batch.html#batch-direct

쉽게 (최대 절전 모드의 문서에서) 만들기 :

Session session = sessionFactory.openSession(); 
Transaction tx = session.beginTransaction(); 

String hqlUpdate = "update Customer c set c.name = :newName where c.name = :oldName"; 
// or String hqlUpdate = "update Customer set name = :newName where name = :oldName"; 
int updatedEntities = s.createQuery(hqlUpdate) 
     .setString("newName", newName) 
     .setString("oldName", oldName) 
     .executeUpdate(); 
tx.commit(); 
session.close(); 

환호!

+0

차갑다. 나는 여전히 처음으로 기록 된 높은 점수를 얻기 위해 추가로 작성해야 할 것들이 필요하다. 감사! –

관련 문제