[Seasar-user:6803] Re: DBFluteでのInsertについて

kubo [E-MAIL ADDRESS DELETED]
2007年 3月 21日 (水) 19:28:04 JST


久保です。

> DBFluteでのInsertで、下記の様に Runtime Exceptionになるのですが、実際は
> Databaseに問題なく Insertされています。
> S2DaoInterceptorの下記行でExceptionとなります。
> cmd.execute(invocation.getArguments());
> Primary Keyを自動採番していますが、
>     /** ID-Annotation */
>     public static final String ccode_ID = "identity";
> とBsCompanyにアノテーションもされています。
> 
> なにか設定の問題でしょうか?
> お手数ですが、ヒントを頂けますか?

現象はわかりました。

PostgreSQLの Identity ですが、
「Insert後に採番されたIdentity値を取得するSQL」が、
S2Daoに定義されていません。

org.seasar.dao.dbms.Standard#getIdentitySelectString()がnullを返しますが、
org.seasar.dao.dbms.PostgreSQLはそのMethodをOverrideしていません。

PostgreSQLで、Insert後に採番されたIdentity値の取得方法が
あるのかどうかが定かではないのですがS2Dao自体が
現状はこのようになっています。


ひとまずの回避としては、Identityではなく、
Sequenceを利用することが挙げられますが、
どうでしょうか?

1. シリアル型を使わずにSequenceを準備する
2. DBFluteにSequenceを設定する
   →http://dbflute.sandbox.seasar.org/ja/tips-sequence.html







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