[Seasar-user:12794] [S2JDBC]Firebirdで、Sequence自動生成に失敗します。
Fujio Yamagishi
[E-MAIL ADDRESS DELETED]
2008年 2月 8日 (金) 11:49:08 JST
こんにちは、山岸と申します。
insert 時に、以下のエラーでレコードを追加できません。
-----------------------------------------------------------------------
DEBUG org.seasar.teeda.extension.util.TeedaExtensionErrorPageManagerImpl -
[ESSR0738]エンティティ(UserInfo)のIDプロパティ(uiId)の自動生成に失敗しました。
-----------------------------------------------------------------------
uiId は、このテーブルのプライマリーキーで、次のように定義しています。
-----------------------------------------------------------------------
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "USER_INFO_UI_ID")
@SequenceGenerator( name = "USER_INFO_UI_ID", sequenceName = "USER_INFO_UI_ID")
public int uiId;
-----------------------------------------------------------------------
CREATE SEQUENCE USER_INFO_UI_ID; で、ジェネレータは作成済みです。
そこで、ソースをみてみました。
-----------------------------------------------------------------------
package org.seasar.extension.jdbc.dialect;
...
public class FirebirdDialect extends StandardDialect {
...
@Override
public String getSequenceNextValString(final String sequenceName) {
return "select RDB$GENERATOR_NAME from RDB$GENERATORS";
}
-----------------------------------------------------------------------
この SQL を、実行してみましたが、シーケンス番号は得られませんでした。
通常は、
"SELECT GEN_ID(USER_INFO_UI_ID,1) FROM RDB$DATABASE"
のような SQL を発行してシーケンス番号を取得してます。
ということで、
"SELECT GEN_ID(" + sequenceName + ",1) FROM RDB$DATABASE"
みたいな、return 文になるのでしょうか。ちなみに、'1' は、増分値です。
ここが原因か、はっきりとはしてないのですが、気がついた事を書きました。
使用環境は以下のとおりです。
Firebird 2.0.3
Tomcat 5.5.25
JDK 5.0 Update 14
jaybird-2.1.2(Firebird JDBC Driver)
s2-framework-2.4.22
s2-extention-2.4.22
s2-tiger-2.4.22
teeda-core-1.0.12
teeda-extension-1.0.12
teeda-tiger-1.0.12
すばらしいプロダクトを公開していただいて、感謝します。
よろしくお願いします。
---
Yamagishi [E-MAIL ADDRESS DELETED]
Seasar-user メーリングリストの案内