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