[Seasar-user:9883] Re: [DbFlute]entity にidentityの値が設定されない

kubo [E-MAIL ADDRESS DELETED]
2007年 8月 14日 (火) 02:24:03 JST


久保です。

> > [現象]
> > behaviorでinsertした後にentityにidentityの値が設定されません。
> > .NET+SQL Server 2005で使用したときはinsert後にidentityの値を取得できたと記憶していますが、Javaだと何か違うのでしょうか?
> > logを見るとselect @@identityは発行されています。
> > schema.xmlを見ると主キーは正しく認識されています。 
> 
> Javaでもそこは全く同じはずです。
> 確かにログを見る限りでは、
> Identityを利用してInsertして@@identityまではうまくいっているようですね。

試しに、RkBase#setBaseId() にログを仕掛けて頂けますか?

public void setBaseId(BigDecimal baseId) {
    log.debug("{Invoked} baseId = " + baseId);
    ...
}

S2Daoは、「select @@identity」の直後にEntityの主キーのSetterを
呼び出して、値を格納します。

org.seasar.dao.id.IdentityIdentifierGenerator#setIdentifier() {
    Object value = executeSql(ds, getDbms().getIdentitySelectString(), null);
    setIdentifier(bean, value);
}

org.seasar.dao.id.AbstractIdentifierGenerator#setIdentifier() {
    if (propertyName == null) {
        throw new EmptyRuntimeException("propertyName");
    }
    BeanDesc beanDesc = BeanDescFactory.getBeanDesc(bean.getClass());
    PropertyDesc pd = beanDesc.getPropertyDesc(propertyName);
    pd.setValue(bean, value); // ★ここで呼んでいるはず
}

ログを仕掛けることによって、
「select @@identity」がnullを返しているのか、
S2Daoが値を設定し損なっているのかの切り分けができるはずです。





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