2012-03-02 5 views
1

모델 변경 사항을 유지할 수있는 여러 컨트롤러 동작간에 "트랜잭션"을 시작할 수 있지만 모든 동작이 완료되지 않으면 저장하지 않는 방법이 있습니까?Play의 컨트롤러 동작 간의 트랜잭션

다음과 같은 사용자 흐름이 있다고 가정 해 보겠습니다. step1 -> step2 -> step3 -> step4 각 단계마다 사용자가 일부 데이터를 채우고 각 단계에 마법사뿐 아니라 모두 취소해야하는 "취소"버튼이 있습니다. 이전 단계에서 변경됩니다.

마지막 단계에서만 데이터베이스에 저장하기 위해 모든 단계에서 채워진 모든 데이터를 다음 단계로 전달하지 않으므로 각 단계에서 하나 이상의 모델 인스턴스를 생성 또는 변경하고 데이터베이스에 저장합니다. '취소'를 클릭하면 이전 단계의 변경 사항을 어떻게 되돌릴 수 있습니까?

이상적으로 우리는 step1에서 "TransactionSupport.startTransaction"을 호출하고 step4에서 "TransactionSupport.endTransaction"을 호출하는 것이 이상적입니다. 그러나 각 단계 요청이 다른 Play 서버로 갈 수 있다는 점을 고려하면 서버간에이 트랜잭션을 어떻게 저장합니까?

답변

1

설명서에 따라 Play는 상태 비 저장이므로 이럴 가능성이 없습니다.

@play.db.jpa.NoTransaction 

그런 다음 해당 요청에 대한 DB 연결을 얻을 것입니다 재생 : 사실 당신은과 주석을 통해 재생의 기본 트랜잭션 관리자를 사용하지 않도록합니다.

문제를 해결하려면 일시적인 테이블에 단계의 정보를 저장하고 끝에있는 "작업중인"테이블에만 데이터를 커밋하십시오.

정보를 사용자 ID, 마법사 ID 및 세션 ID에 연결하면 부실 데이터를 감지 할 수 있습니다.

관련 문제