2010-05-07 2 views
0

데이터 파일을 가져 오는 Java 응용 프로그램을 작성하려고합니다.최대 절전 모드 삭제 문제

  1. 가 또는 롤백 오류가 발생 된 커밋 경우 데이터 테이블
  2. 에 데이터 테이블
  3. 로드 데이터 파일의 모든 행을 삭제 트랜잭션을
  4. 만들기 프로세스는 다음과.

3 단계에서로드 한 데이터는 대부분 3 단계에서 삭제 한 데이터와 같습니다.

을 삭제는 전체 프로세스는 트랜잭션에 일어날 필요가 그때 데이터 파일을로드 할 때

DetachedCriteria criteria = DetachedCriteria.forClass(myObject.class); 
List<myObject> myObjects = hibernateTemplate.findByCriteria(criteria); 
hibernateTemplate.deleteAll(myObjects); 

다음, 내가받을 다음과 같은 예외

nested exception is org.hibernate.NonUniqueObjectException: 
a different object with the same identifier value was already associated with the session: 

를 사용하여 수행됩니다. 그리고 가져 오기 파일/데이터 테이블을 비교하고 삽입/업데이트/삭제를 수행하여 동기화되도록하고 싶지는 않습니다.

도움을 주시면 감사하겠습니다.

답변

0

최단 대답, 일반 JDBC의 최대 절전 모드를 사용 session.merge()

짧은 답변을 사용하면이 작업에 대한 잘못된 도구입니다.

길게 대답하십시오.이 점에 관해서는 데이터베이스 도구가 무엇을 지원하는지보십시오.
해결책은 될 수에 :

  1. 이름 바꾸기 테이블 OLD_TABLE
  2. 는 것 새 테이블
  3. 드롭 OLD_TABLE

귀하의 전체 테이블에 데이터를 가져 오려면 새 빈 테이블을 생성 문제가되지 않도록 유스 케이스에 잠겨 있어야합니다.

+0

아마도 가장 간단한 해결책입니다. 불행히도 우리가 사용하고있는 DB 계정은 업데이트/삽입/삭제 권한 만 있습니다. 나는 드롭 대신에 nsert/update/delete와 함께 가야 할 수도 있습니다 ... ta – muffytyrone

0

첫 번째 아이디어 : flush()Session 2 단계 후에 시도 했습니까?

두 번째 아이디어 : the StatelessSession interface을 사용하십시오. SPR-6202SPR-2495이 해결되지 않았기 때문에 HibernateTemplate을 확장해야 할 수 있습니다.