ま、ねえ・・・自分はjavaをしたことがなかった。周りの若い皆さん、大半は子供より若い人たちが自在にプログラムを使いこなしているのを見ると、自分はとてもお爺さんだというのを感じる。
で、このjavaのアノテーションというのが実にわからなかった。なんかメソッドの前に@なんとかというのでコメントをつけると、その後のプログラムが変わる。
トランザクションはプログラムをやっているものにとってなじみのある概念で、たとえば2つのテーブルを更新する際に、途中で他の処理が割り込んで矛盾が起きたりしないように「ちょっと待って!今やってるから。」というのを宣言する。
それは自分の中ではBeginTransaction, CommitTransaction, RollbackTransaction(言語によって多少違います)であらわされるものだと思っていた。Beginで処理をはじめ、すべて終わるとCommitをする。でも途中マズいことがあったらRollbackして、今までの処理はなかったことにする。
ところがjavaでは@Transactionalというアノテーションをつければ、コードのうちにBeginだとかCommitだとか書かなくてもいいという。
と、いつこれはロールバックするのだ?
DB処理は別のファイルを作ってそこに書く。そこでthrowしたエラー(RuntimeExceptionじゃないとだめだそうです)は、主なファイルでcatchする。ロールバックがかかるのはそのcatchの後なんです。