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

Koichi Kobayashi [E-MAIL ADDRESS DELETED]
2008年 2月 24日 (日) 08:00:08 JST


小林 (koichik) です.

Date:    Sat, 23 Feb 2008 10:17:50 +0900
From:    <[E-MAIL ADDRESS DELETED]>
To:      <[E-MAIL ADDRESS DELETED]>
Subject: [Seasar-user:13020] [S2JDBC]Exception時のトランザクション処理

> あるテーブルにinsertして、一意制約エラーだったら、updateすると
> いうような処理を考えています(DBはpostgreSQLを利用)。

PostgreSQL ではそういうことはできないようですね.
一意制約違反になった時点でトランザクションが
アボートされてしまうようなので,まずは update して,
その結果が 0 件だったら insert するようにしないと
いけないらしい.

int count = jdbcManager.update(employee).execute();
if (count == 0) {
  jdbcManager.insert(employee).execute();
}

> 【うまくいったようにみえるケース】
(略)
> 【質問】
> これで表面上、うまく動作したように見えてはいるのですが、この実装方法で
> 正しいものでしょうか

これだと更新だけが独立したトランザクションに
なってしまうので,別の処理で問題があったときに
全体としてロールバックできなくなります.


-- 
<component name="koichik">
    <property name="fullName">"Koichi Kobayashi"</property>
    <property name="email">"[E-MAIL ADDRESS DELETED]"</property>
    <property name="blog">"http://d.hatena.ne.jp/koichik"</property>
</component>



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