[Seasar-user:13040] Re: [S2JDBC]Exception時のトランザクション処理
[E-MAIL ADDRESS DELETED]
[E-MAIL ADDRESS DELETED]
2008年 2月 25日 (月) 00:11:27 JST
片岡です。
>PostgreSQL ではそういうことはできないようですね.
>一意制約違反になった時点でトランザクションが
>アボートされてしまうようなので,まずは update して,
>その結果が 0 件だったら insert するようにしないと
>いけないらしい.
>int count = jdbcManager.update(employee).execute();
>if (count == 0) {
> jdbcManager.insert(employee).execute();
>}
なるほど。ありがとうございました。
強引な実装になってしまうところでした。助かりました。
________________________________
From: [E-MAIL ADDRESS DELETED] 代理 Koichi Kobayashi
Sent: 2008/02/24 (日) 8:00
To: [E-MAIL ADDRESS DELETED]
Subject: [Seasar-user:13029] Re: [S2JDBC]Exception時のトランザクション処理
小林 (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 mailing list
[E-MAIL ADDRESS DELETED]
https://ml.seasar.org/mailman/listinfo/seasar-user
-------------- next part --------------
HTMLの添付ファイルを保管しました...
URL: http://ml.seasar.org/archives/seasar-user/attachments/20080225/a38ef9be/attachment-0001.html
Seasar-user メーリングリストの案内