[Seasar-user:16709] Re: [S2JDBC-Gen]PostgreSQLにおいてシーケンスの現在値を維持する方法について

Toshihiro Nakamura [E-MAIL ADDRESS DELETED]
2009年 1月 22日 (木) 00:39:19 JST


中村(taedium)です。

> 主キーとなるプロパティに
> @GeneratedValue
> をつけてマイグレーションしたところ、主キーの型が、
> serial 型になるのですが、その際生成されるシーケンスオブジェクト
> 'テーブル名_主キー名_seq'の現在値が 1 に戻ってしまいます。

報告ありがとうございます。
serial型(で暗黙的に作成されるSEQUENCE)の場合は、
現在値を維持していませんでした。
修正したいと思います。

代替策としては、すでに行われていますが、
@GeneratedValueのstrategy要素にGenerationType.SEQUENCEを
指定し、明示的に作成する方法があります。

> @Column(name = "emp_no", columnDefinition = "default nextval('emp_no_seq')")
> 
> とデフォルト値にシーケンスを使おうとしたら
> org.postgresql.util.PSQLException:
> ERROR: relation "emp_no_seq" does not exist
> というエラーがマイグレーション時に発生します。
> SQL ファイルで挿入処理を行う際に主キーにいれる値はデフォルト値に
> 任せたいのですが、どうすれば良いでしょうか。

SEQUENCEが作成される前にCREATE TABLE文が
実行されてしまうからですね。
Gen-DdlタスクのcreateSequenceDirName属性の値を
"001-sequence"などとし、createTableDirName属性の値"010-table"
よりも小さくしてください。
この設定でGen-DdlしてMigrateすると
SEQUENCEが先に生成されるようになります。

-- 
Toshihiro Nakamura



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