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