[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 メーリングリストの案内