2012-05-28 3 views
2

Oracle Db의 테이블에서 한 번에 한 레코드 씩 읽는 응용 프로그램을 작성한 후 일부 처리를 수행 한 다음 동일한 테이블에 다시 저장합니다. 테이블의 상태 열을 유지하여 현재 진행중인 레코드 진행 상황을 추적합니다. 처음에는 레코드 상태를 'N'으로 선택하고 'U'로 업데이트하고 마지막에는 'P'로 변경합니다.Java 절전 기준을 사용하여 단일 쿼리로 선택 및 업데이트 수행 API

내 문제는이 응용 프로그램의 많은 인스턴스를 실행하고 싶지만 차단기가 'U'로 상태를 선택하고 업데이트하는 것이 단일 쿼리가 아니기 때문에 다른 인스턴스에서 선택 될 수 있습니다. 프로세스 1 선택 그런 다음 Process2는 동일한 레코드를 선택한 다음 Process1 업데이트 상태를 'U'로 변경합니다.이 문제를 해결하여 응용 프로그램을 분산시켜야합니다.

단일 트랜잭션으로 선택 및 업데이트 쿼리를 만들었지 만 문제가 해결되지 않기 때문에 추측합니다.이 논리는 맞습니까?

데이터베이스에 액세스하기 위해 최대 절전 모드를 사용하고 있습니다. 최대 절전 모드 자바를 사용하여 이것을 어떻게 얻을 수 있습니까?

위의 논리 (트랜잭션 관련)가 올바른 경우 다음 중 하나가 최대 절전 모드로 제공되는 경우 2 가지 방법으로이 작업을 수행 할 수 있습니다.

1 선택 1 개 쿼리

의 레코드를 업데이트 행을 2 선택 1 개 쿼리에 고정하고 'U'에 상태를 업데이트하기 위해 동일한 트랜잭션에서 다른 쿼리를 실행합니다. SQL에서 '업데이트를 사용하여이 작업을 수행 할 수 있지만 쿼리를 끝낼 때'최대 절전 기준을 사용하여이 작업을 수행하는 방법을 잘 모르겠습니다. 일기 또한 'forUpdate'API를 가지고 있지만 쿼리 생성 한 때문에 작동하지 않는 것 같아요 이 경우 Hibernate는 마지막으로 'for update'를 가지고 있지 않다.

는 사람이 기준을 사용하여 하나 개의 쿼리에이

+0

죄송합니다. 'setLockMode'API는 'forUpdate'API가 아닙니다. – Rahul

+0

이 게시물을 편집 할 수 있습니다. – JMelnik

답변

2

에서 예, 그것은 가능하다 저를 도와주세요 수 있습니다.

하나의 예를 쓰고 있습니다. 나는 그것이 당신에게 도움이되기를 바랍니다.

public void updateEmployee(int empid,String firstname, String lastname, String email) 
{ 
    sf=connect(); // get connection 
    Session session=sf.openSession(); 
    Transaction t=session.beginTransaction(); 

    Employee emp= (Employee) session.get(Employee.class, empid); 
    emp.setFirstname(firstname); 
    emp.setLastname(lastname); 
    emp.setEmail(email); 

    session.update(emp); // Update employee 
    t.commit(); 
    session.close(); 
}