RuntimeExceptionにthrows節はいらないの巻
ずいぶん基本的なことを最近知った。
RuntimeException は、Java 仮想マシンの通常の処理でスローすることができる各種の例外のスーパークラスです。
メソッドの実行中にスローされるがキャッチされない RuntimeException のサブクラスについては、メソッドの throws 節でそれらを宣言する必要はありません。
http://sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ja/api/java/lang/RuntimeException.html
ちなみにSpring Frameworkは、Exceptionをthrowしてもrollbackしてくれない。(なかったんだけど、ホントかどうかは?)
RuntimeExceptionをthrowすれば、rollbackしてくれることが確認できた。
気になって調べてみたところ、Hibernateの例外クラスは全てRuntimeExceptionのサブクラスであった。SQLException(Exceptionのサブクラス)をcatchしたら、Hibernateの例外クラスにラップしていたような気がする。(数週間前のことなので、明確に覚えていない・・・orz.)