[Seasar-user:3964] [s2dao]Sequenceを使ったIDのカラムがNullの場合にIDの値が2つすすむ

竹内 圭 [E-MAIL ADDRESS DELETED]
2006年 6月 26日 (月) 18:57:48 JST


御世話になります。
rokugenこと竹内です。

現在、S2Dao1.0.35、postgreSQL8.1で開発中です。

以前、Beanのカラムがnullの場合に
SQL文からカラム名を除外する仕様になりましたが、
新規登録画面などから新規レコードを登録した場合、
Beanの主キーのカラムはnullになるのが自然と思われます。
で、

class MyBean{
    private Integer id; ←主キー
    private String name;
    private String otherColumn;

    @Id(value=IdType.SEQUENCE, sequenceName="myseq")
    public void setId(Integer id){
          this.id = id;
    }
}

といったBeanでInsertしようとした場合、

select nextval(myseq)

INSERT(name, otherColumn)VALUES(......

と云う形でINSERT文からidが除外され、
nextvalした分とINSERT時にpostgres側でインクリメントする分で
2つ値が進んでしまいます。

この後同一トランザクション上で、交差エンティティなどの
INSERTを行おうとすると、MyBeanのIdに入ってる値はnextval時の値、
DB上にはその +1 の値となるため、整合が取れなくなってしまいます。

現在Dao#insert()の前に、仕様上Idにセットされない値(マイナスとか)を
セットして期待したとおりに動いています。

myBean.setId(Integer.valueOf(-1));
myBeanDao.insert(myBean);

という形ですが、どうにも気分がいいものではないので
insert時にnextvalでIdをセットする場合は
元々nullでもSQL文からカラム名を除外しないように
して戴けたらとても有り難いです。

如何でしょうか?

宜しく御願い致します。




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