: 여기
@Transactional(propagation = Propagation.REQUIRES_NEW)
def test1() {
def dummy = new Dummy(name: "test1")
dummy.save()
throw new RuntimeException("test1!")
}
하지만하지 - - 아마 잘못되는 시도/캐치 동작에 영향을주지해야한다
어쩌면 당신은 시도 캐치의 목적을 오해 또는 어쩌면 당신은 흔들 거리는 순간 데 :
@Transactional(propagation = Propagation.REQUIRES_NEW)
def test2() {
//you may be doing other stuff here
//but now about to do some transaction work
//so lets wrap this method around a try catch
try {
//this is happening
def dummy = new Dummy(name: "test2")
dummy.save()
} catch (Exception all) { // or catch (Throwable all) {
// if something went wrong in above save method
//should be caught and runtime exception means roll back
throw new RuntimeException("test2!" +all?.toString())
}
}
내가 희망을 어디서 잘못되었는지 설명하지만 실제로이 모든 것을 서비스에서 수행하고 컨트롤러에서 catch 부분을 잡으려고합니다. -
트랜잭션 작업을 수행하고 문제가 발생하면 컨트롤러에서 try catch가 캡처하여 롤백하도록 설정할 서비스.
I did a sample project years back here 그것이
그 사람의 실험을하고 정말 적절한 코딩을하고 가겠어요 길없는 eitherway 도움이되기를 바랍니다, 나는 일을 오히려 이상한 특이한 방법으로 의미 짧은에서 그는 단지입니다 런타임 예외를 발생 시키므로 롤백을 유발합니다. 나는 당신이 컨트롤러에서 잡으려고 시도하는 대답을 원한다는 대답에 나의 제안을 고수한다. 이는 주어진 서비스 트랜잭션 작업의 실패 내에서의 실패뿐만 아니라 현재의 객체의 유효성 검증 오류를 포착하려고 시도합니다. Something like this하지만 모든 특정 문제를 캡처하고 근본적인 문제가있는 원래 페이지로 돌아가는 작업이 더 많아졌습니다. 이제는 트랜잭션을 롤백했습니다.
어쨌든 프록시에서 예외를 인식 할 것으로 기대하고 있습니다. 테스트 2 : http://devhobbs.blogspot.de/2015/04/grailsgorm-transactions.html (테스트 2 결과 : 기록이 작성되지 않았습니다. 예외가 롤백됩니다.) –
서비스를 시작하기 만하면됩니까? '@Transactional (propagation = Propagation.REQUIRES_NEW) def test1() {'은 (는) 서비스 중이십니까[email protected] BookService {' – Vahid
예제에 대한 내 코멘트가 너무 길어서 업데이트 된 답변을 확인한 이후에 내 answe를 업데이트했습니다. – Vahid