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