プロジェクトでGroovyバージョンを1.76から2.1にアップグレードしているだけで、次のような単体テストがあります。
try{
sql.withTransaction{
sql.execute("Update table set name='tested' where id = 1")
throw new Exception()
}
}
catch(ignore){}
//Assert that name has been rolled back from update to 'tested'
以前の 1.76 では、これは正しく機能していました。スローされた例外によってトランザクションがロールバックされ、すべて問題ありませんでした。しかし、これは 2.1 には当てはまりません。例外をスローするように変更すると、RuntimeException
正しくロールバックされることがわかりました。
私の推測では、Groovy はチェックされた例外のためにトランザクションをロールバックしなくなりました。これは構成できるものですか? 例外をキャッチするときにすべてのコードを明示的にロールバックするように戻って更新するのではなく、すべてのトランザクションでロールバックすることはできますか?