2013-07-14 8 views
1

사이의 개체를 공유, 최대 절전 모드와 별도의 격리 된 작업을 실행, 나는 다음을 수행하려고 해요 :로부터 객체의나 최대 절전 모드로, 자바 응용 프로그램을 쓰고 있어요 작업

  1. 검색어 목록 데이터베이스를 선택한 다음 각 개체에 대해
  2. 데이터베이스에서 제거하십시오.
  3. 작업을 수행하십시오.
  4. 작업이 실패하면 개체를 수정하고 다시 데이터베이스에 삽입하십시오.

그러나, 나는 신뢰할 수없는 데이터베이스 연결 함께 일하고 있어요, 작업이 (3 단계에게) 그것을 수행되기 전에 개체가 성공적으로 데이터베이스 (2 단계)에서 제거하는 것이 필수적이다. 객체가 성공적으로 다시 삽입되는 것이 중요하지만 중요하지는 않습니다 (4 단계).

(더 높은 수준의 요구 사항은 작업이 개체에서 성공적으로 수행되면 데이터베이스에 남아있을 수 없다는 것입니다. 그래서 그 개체를 먼저 제거하고 실제로 제거하기 전에 제거해야한다는 결론을 얻었습니다. 조작).

최대 절전 모드 세션, 트랜잭션 및 오브젝트 상태 (예 : "분리")를 완전히 이해하지 못합니다. 이것을 어떻게 할 수 있습니까?

나는 트랜잭션을 커밋/롤백하고/병합/보존/저장/삭제/여기에 나열 할 개체를 업데이트하는 세션을 열거 나 닫는 순열을 너무 많이 시도했지만 한 가지 오류 또는 다른 오류로 인해 실패합니다. 나는 Hibernate 문서를 언급 해왔다. 그러나 기본적으로 나는 내가하고있는 것을 정말로 이해하지 못하기 때문에 여기 어둠 속에서 흔들고있다. 그래서 어떤 제안도 환영 받는다.

답변

2

트랜잭션은 기본적으로 트랜잭션의 시작과 끝 사이에서 수행 된 모든 작업이 성공적으로 수행되거나 취소되도록합니다. 따라서 데이터베이스의 상태는 트랜잭션 시작 전이었던 그대로 (롤백의 경우) 그대로 유지되거나 모두 트랜잭션 중에 수정 (삽입, 업데이트, 제거)이 완료된 경우 (성공적인 커밋의 경우).

그냥 트랜잭션을 열고 원하는 모든 작업을 수행 한 다음 트랜잭션을 커밋하십시오. 예외가 발생하면 트랜잭션을 롤백하십시오. 데이터베이스의 상태는 수정되지 않은 상태로 유지되거나 트랜잭션 중에 수행 한 모든 제거 및 재 삽입을 포함합니다.

재 삽입에 대해 실제로 신경 쓰지 않는다면 모든 것을 제거하는 첫 번째 트랜잭션과이 트랜잭션이 성공적으로 커밋 된 경우 조작 및 재 삽입을위한 하나 이상의 여러 트랜잭션이있을 수 있습니다.

비 관리 환경 (현재있는 것으로 가정)에서 트랜잭션을 시작, 커밋 및 롤백하는 일반적인 방법은 the documentation에 설명되어 있습니다.

+0

감사합니다. 트랜잭션을 커밋 할 때 실제로 발생합니까, 아니면 먼저 세션을 플러시하거나 닫아야합니까? 나는. 세션 캐시 트랜잭션을 수행하고 모든 트랜잭션을 실제로 데이터베이스에 제출하기 전에 트랜잭션이 닫힐 때까지 기다리거나, 트랜잭션을 커밋하면 그 시점까지 모든 것이 성공적으로 데이터베이스 서버로 전송됩니다. –

+1

커밋은 커밋의 데이터베이스 의미에서 커밋입니다. 실제로 데이터베이스에 커밋됩니다. 기본적으로 트랜잭션을 커밋하면 실제 커밋 전에 보류중인 모든 쓰기가 플러시됩니다. 그래서 네, 성공한 커밋을한다면, 그 시점까지 모든 것이 데이터베이스 서버에 보내지고 데이터베이스에 의해 커밋됩니다. –

+0

좋아요! 당신이 쓴 것을 사용하고, 앉아서 깨끗한 머리로 다시 시작하면서, 나는 그것이 원하는 방식으로 정확하게 작동하고 코드는 매우 간단합니다. 다시 한 번 감사드립니다! –

관련 문제