[Seasar-user:7044] Re: [DBFlute] IDの自動生成が動かない

kubo [E-MAIL ADDRESS DELETED]
2007年 4月 4日 (水) 10:24:12 JST


久保です。

> > FooServiceImplを取得しているContainerとFooDaoを取得しているContainerって
> > 同じインスタンスですか?
> FooServiceImplはs2flex2の自動登録を利用しています。
> FooDaoの取得は、
> 
> container = SingletonS2ContainerFactory.getContainer();
> final FooDao pinfoDao = (FooDao)container.getComponent( FooDao.class );
> 
> のように書いております。
> 
> > ここでincludeしている j2ee.dicon を見せて頂けないでしょうか?
> > (それともS2Containerに同梱されているj2ee.diconをincludeしていますか?)
> S2Containerに同梱されているj2ee.diconを、app.diconにてincludeしています。
> 
> > また、dbflute.diconがincludeしているのは同様に j2ee.dicon でしょうか?
> はい、確かに。

申し訳ないですが、
ちょっと現状の情報だけではなんとも原因を掴みきれていません。

・MySQLは悪くなさそう{確かにInnoDB}
・SeasarはTransactionを発信している。
・結果はまるでTransactionが効いていないよう。

DBFluteで作成したEntityのPropertyは恐らくBigDecimalなので、
誰かが意図的に「0」を入れています。
S2Daoしか考えられないのですが、S2DaoはLAST_INSERT_ID()の結果を
単純に格納しています。

お手数ですが、[Seasar-user:7010]の

> また、わざと例外を発生させて処理が本当にロールバックされているかどうか
> 確認して頂けますでしょうか?
> 
> Insert後に例外を発生させて、DBの中を別のツールで覗いて
> そのInsertが確かに無効になっていることを確認。

をやって頂けますでしょうか?
(もし既に確認済なら確認済みと言って頂ければOKです)

ロールバックされなければ、やはりS2DaoのDataSourceとServiceのDataSourceが
違うものになってしまっている可能性があります。
(すいませんが自分、s2flex2の自動登録というのがどういうものか
 把握していないです)

ロールバックされているのであれば、S2Daoの処理上で
どこかおかしくなって「0」を登録しているのかもしれませんので
S2Daoのソースを書き換えてTraceして内部処理を追っかけて調べるしかない
かと思います。







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