[Seasar-user:3915] [s2dao] PK のみ存在するテーブルへの Insert で例外

山田 太郎 [E-MAIL ADDRESS DELETED]
2006年 6月 20日 (火) 22:38:31 JST


森脇と申します、初めて投稿します。

s2daoのバージョンアップ(1.0.34 → 1.0.35)検証を行って
いたところ、
下記の例外が発生しました。

--------------------------------------------------
org.seasar.framework.exception.SRuntimeException:
[EDAO0014]not null
であるカラムがありません
        at
org.seasar.dao.impl.InsertAutoDynamicCommand.createInsertPropertyTypes(InsertAutoDynamicCommand.java:119)
        at
org.seasar.dao.impl.InsertAutoDynamicCommand.execute(InsertAutoDynamicCommand.java:52)
        at
org.seasar.dao.interceptors.S2DaoInterceptor.invoke(S2DaoInterceptor.java:53)
--------------------------------------------------

状況としてはPKのみ存在するテーブルへInsertを行った時に発
生しました。
とりあえずEclipseにてステップ実行を行い確認したところ
org.seasar.dao.impl.InsertAutoDynamicCommand#createInsertPropertyTypes

内の
判定で以下の様な違いがあるため、notNullColumnsと判定され
ず発生しているようです。


・1.0.35の場合
--------------------------------------------------
if (pt.isPrimaryKey()) {
    if (!identifierGenerator.isSelfGenerate()) {
        continue;
    }
} else if (pt.getPropertyDesc().getValue(bean) == null) { 
        
← ※※ここ※※
    final String propertyName = pt.getPropertyName();
    if
(!propertyName.equalsIgnoreCase(timestampPropertyName)
            && !propertyName
                   
.equalsIgnoreCase(versionNoPropertyName)) {
        continue;
    }
} else {
    notNullColumns++;
}
--------------------------------------------------

・1.0.34の場合
--------------------------------------------------
if (pt.isPrimaryKey() &&
!identifierGenerator.isSelfGenerate()) {
    continue;
}
if (pt.getPropertyDesc().getValue(bean) == null) {        
        
← ※※ここ※※
    final String propertyName = pt.getPropertyName();
    if
(!propertyName.equalsIgnoreCase(timestampPropertyName)
            &&
!propertyName.equals(versionNoPropertyName)) {
        continue;
    }
} else {
    notNullColumns++;
}
--------------------------------------------------


以下がソースの抜粋になります。

--------------------------------------------------
CREATE TABLE humo (
    hoge1 INTEGER NOT NULL
   ,hoge2 INTEGER NOT NULL
   ,PRIMARY KEY(hoge1, hoge2)
 );

@Bean(table = "humo")
public class Humo {

    private Integer hoge1_;

    private Integer hoge2_;

    @Column("hoge1")
    public void setHoge1(Integer hoge1) { hoge1_ = hoge1;
}
    public Integer getHoge1() { return hoge1_; }

    @Column("hoge2")
    public void setHoge2(Integer hoge2) { hoge2_ = hoge2;
}
    public Integer getHoge2() { return hoge2_; }

}

@S2Dao(bean = Humo.class)
public interface HumoDao {

    int insert(Humo humo);

}

public class HumoDaoTest extends S2DaoTestCase {

    private HumoDao humoDao_;

    public void testInsertTx() throws Exception {
        Humo humo = new Humo();
        humo.setHoge1(10);
        humo.setHoge2(11);

        humoDao_.insert(humo);
    }

}
--------------------------------------------------


--------------------------------------
Let's start Yahoo! Auction  -  Free Campaign Now!
http://pr.mail.yahoo.co.jp/auction/



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