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