[Seasar-user:14717] [dbflute]idの自動採番について

Chihiro Ueta [E-MAIL ADDRESS DELETED]
2008年 6月 16日 (月) 19:45:46 JST


植田と申します。
いつもお世話になっております。

dbfluteのインサート時のIDの自動割り当てについて質問させてください。

以下のような環境で使用させて頂いております。
DB:PostgreSQL8.1
jdbc:8.3-603.jdbc3
dbflute:0.7.1
s2-framework:2.4.24
s2dao:1.0.47

S2Unitで、S2TestCase#readXlsReplaceDb("エクセルファイル") を利用したテス
トを行っております。
「work」のテーブルのテストを行うためにエクセルファイルには、ID(primary
key)が 1 から 5 までのテストデータを「work」のテーブルに登録しておりま
す。テストには「work」テーブルの外部参照テーブルを含めたいため、エクセル
ファイルにはID(primary key)も指定しております。
「work」テーブルに対してdbfluteのWorkBhv#insertのテストを実行した場合
に、ID が 1 から始まってしまうため、下のようなプライマリキーが重複してい
るというエラーが発生します。この場合のテストを成功させるために、何か良い
方法はないでしょうか?設定内容などについて注意点などが御座いましたらご助
言頂けませんでしょうか?

--------エラー内容--------
org.seasar.framework.exception.SQLRuntimeException: [ESSR0072]SQLで例外
(SQL=[INSERT INTO work ("省略") VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,
?, ?, ?, ?, ?, ?)], Message=[[ESSR0072]SQLで例外(SQL=[INSERT INTO work
("省略") VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)],
Message=[0], ErrorCode=23505, SQLState={3})が発生しました : [SQLで例外
(Message=[ERROR: duplicate key violates unique constraint "work_pkey"],
ErrorCode=0, SQLState=23505)が発生しました。], [ERROR: duplicate key
violates unique constraint "work_pkey"], ErrorCode=0, SQLState=23505)が
発生しました
--------------------------

再度テストを実行すると、自動で割り当てられるIDは 2 になります。
これを繰り返すと、IDは1づつ大きくなっていき、6 になったときにテストに成
功します。

「work」のテーブルの ID のカラムは SERIAL8 で作成し、Sequence設定は行っ
ておりません。
試しにSequence設定で以下のような設定を行いましたが、insert時に振られるID
はやはり 1 から始まりました。

dfprop/sequenceDefinitionMap.dfprop

map:{
    ; work     = work_id_seq
}

以上、宜しくお願い致します。



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