[Seasar-user:13020] [S2JDBC]Exception時のトランザクション処理

[E-MAIL ADDRESS DELETED] [E-MAIL ADDRESS DELETED]
2008年 2月 23日 (土) 10:17:50 JST


片岡と申します。
S2JDBC、SAStrutsを利用したアプリケーションを作成していますが、
トランザクション管理に関して、質問があります。
あるテーブルにinsertして、一意制約エラーだったら、updateすると
いうような処理を考えています(DBはpostgreSQLを利用)。一応、動作
するようにはなったのですが、私のトランザクション処理の理解に不安
があり、この実装で問題ないかという点を確認したいと思い、メール
しました。
【うまくいかなかったケース】
try{
 int count=jdbcManager
  .insert(employee)
  .execute();
 }catch(SEntityExistsException e){
  int a=jdbcManager.update(employee).execute();
 }
とすると、「current transaction is aborted, commands ignored until 
end of transaction block」というエラーがでてうまくいきません。

【うまくいったようにみえるケース】
そこで、update文の部分を別メソッドにし、別トランザクションで動かす
ようにしました。
try{
 int count=jdbcManager
  .insert(employee)
  .execute();
 }catch(SEntityExistsException e){
  int a=jdbcManager.update(employee).execute();
 }
@RequiresNewTx
public  int update(Employee employee){
 return jdbcManager.update(employee).execute();
}
【質問】
これで表面上、うまく動作したように見えてはいるのですが、この実装方法で
正しいものでしょうか

-------------- next part --------------
HTMLの添付ファイルを保管しました...
URL: http://ml.seasar.org/archives/seasar-user/attachments/20080223/14230f24/attachment-0001.html 


Seasar-user メーリングリストの案内