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