내가 NHibernate에의 트랜잭션 제어 및 FlushMode 옵션을 사용하여 중첩 된 트랜잭션 행동의 어떤 종류를 달성하기 위해 노력하고있어,하지만 일이 너무 많이 읽은 후 혼란을 조금 가지고 그래서 아래 목록 사실에 대한 확인 것 매우 유용합니다.달성 NHibernate에 중첩 된 트랜잭션 행동
내가 원하는 것은 작은 트랜잭션으로 나누는 하나의 큰 트랜잭션을 여는 것입니다. 다음과 같은 시나리오를 상상해보십시오 :
- TX1은 TX를 열고 사람 기록을 삽입합니다.
- TX2는 TX를 열고이 사람의 이름을 P2로 업데이트합니다.
- TX2 커밋;
- TX3은 TX를 열고이 사람 이름을 P3으로 업데이트합니다.
- TX3 롤백;
- TX1 커밋;
나는 NH가 INSERT와 TX2 UPDATE를 데이터베이스에 보내고, TX3을 무시하고, 그것이 롤백 된 것을보고 싶습니다.
FlushMode = Never를 사용하고 적절한 Begins/Commits/Rollbacks가 요구 된 후에 만 세션을 플러시하려고했지만 NH은 커밋과 롤백과 관계없이 항상 개체의 최종 상태로 데이터베이스를 업데이트합니다. 정상입니까? NH가 FlushMode = Never로 작업 할 때 트랜잭션 제어를 실제로 무시합니까?
또한 FlushMode = Commit 및 중첩 된 트랜잭션 열기를 시도했지만 ADO.NET, 중첩 된 트랜잭션은 실제로 항상 동일한 트랜잭션이므로이를 발견했습니다.
"모든 것이 든 아니든"동작을 얻으려고하지는 않습니다. 나는 세이브 포인트 (savepoint) 방식의 작업 방법을 찾고있다. NH와 함께 (savepoints) 할 방법이 있습니까?
미리 감사드립니다.
Filipe
이 같은 중첩 된 트랜잭션을 사용하는 실제적인 장점은 무엇입니까? – Paco
파코 (Paco), 아이디어는 우리가 transacional 행동과 관련된 "용기"를 가질 수 있다는 것입니다. 이것은 우리가 구축하고있는 통합 프레임 워크이며, transacional 동작이 다른 여러 블록을 가질 수 있습니다. 엔티티 A와 B가 함께 삽입되고 오류로 인해 전체 롤백이 발생하지만 엔티티 C는 계속 통합해야하는 동일한 통합의 세 번째 부분입니다 오류 발생시에도. 시나리오가 조금 복잡하지만이 설명이 귀하가 이해하기를 바랍니다. 나는 보험 회사가 내 이해를 확인하고 이러한 문제를 해결하기위한 다른 방법을 찾아 내려고 노력할 것이라고 기대했다. Tnks. – jfneis