[Seasar-user:14034] Re: [DBFlute]deleteNonstrictの挙動について質問
kubo
[E-MAIL ADDRESS DELETED]
2008年 5月 1日 (木) 14:51:05 JST
久保です。
森脇さん
修正しました。次バージョンに反映されます。
https://www.seasar.org/svn/sandbox/dbflute/trunk/dbflute-basic-example/src/test/java/com/example/dbflute/basic/dbflute/exbhv/PurchaseBhvTest.java
においても、検証するExampleメソッドを追加しておきました。
> また、DBFluteに関して質問するかもしれませんがよろしくお願いします。
はい、こちらこそよろしくお願いします。
2008/4/30 k. moriwaki <[E-MAIL ADDRESS DELETED]>:
> 森脇です。
>
>
> > 存在しないPKでdeleteNonstrict()を実行したときに、
> > 確かに
> > 「EntityAlreadyDeletedException」
> > ではなく
> > 「EntityAlreadyUpdatedException」
> > が発生してしまうようです(再現しました)。
> > ※updateNonstrict()でも同じようですね
> 再現できて良かったです。
>
> > これはDBFluteのバグですので、修正致します。
> > (詳細に関してはまた連絡いたします)
> 了解しました。
>
>
> また、DBFluteに関して質問するかもしれませんがよろしくお願いします。
>
> 2008/04/30 18:56 kubo <[E-MAIL ADDRESS DELETED]>:
>
>
> > 久保です。
> >
> > 情報提供ありがとうございます。
> >
> > 存在しないPKでdeleteNonstrict()を実行したときに、
> > 確かに
> > 「EntityAlreadyDeletedException」
> > ではなく
> > 「EntityAlreadyUpdatedException」
> > が発生してしまうようです(再現しました)。
> > ※updateNonstrict()でも同じようですね
> >
> > 申し訳ございません。
> > これはDBFluteのバグですので、修正致します。
> > (詳細に関してはまた連絡いたします)
> >
> >
> >
> > 2008/4/30 k. moriwaki <[E-MAIL ADDRESS DELETED]>:
> > > 久保さん
> > > 森脇です。早速の返答ありがとうございます。
> > >
> > > > 申し訳ありませんが、
> > > > UTのテストコードを差し支えない範囲で
> > > > 見せて頂けますでしょうか?
> > > UTのテストコードとLogicクラスは以下のような感じになっています。
> > > テーブルは更新番号と更新日時両方ありますが、排他には更新番号を利用しています。
> > >
> > > ---------- UTここから ----------
> > > @RunWith(Seasar2.class)
> > > public class AaaLogicImplTest {
> > > ~プロパティ略~
> > >
> > > public void testDeleteAaa_2() {
> > > try {
> > > logic.deleteWatchlistTbl(999);
> > > } catch (EntityAlreadyUpdatedException e) {
> > > e.printStackTrace(); // ここで出力したログが前回のメールで送付したもの
> > > assertEquals(EntityAlreadyUpdatedException.class, e.getClass());
> > > return;
> > > } catch (Exception exception) {
> > > fail("予期しない例外");
> > > }
> > > fail("例外が発生しない");
> > > }
> > > }
> > > ---------- UTここまで ----------
> > >
> > > ---------- Logicここから ----------
> > > public class AaaLogicImpl implements AaaLogic {
> > > @Override
> > > public void deleteAaa(int id) {
> > > AaaTbl aaa = new AaaTbl();
> > > aaa.setId(id);
> > > AaaTblBhv.deleteNonstrict(aaa);
> > > }
> > > }
> > > ---------- Logicここまで ----------
> > >
> > >
> > > > (あとデータベースのテーブル構造や
> > > > データがどのような状況なのか)
> > > データベースのテーブル構造は以下の通りで、データはS2JUnit4の機能を利用して
> > > テスト実行時にデータを全て入れ替えています。
> > > -> http://s2container.seasar.org/2.4/ja/S2JUnit4.html#tipsAllReplace
> > > なのでデータはidが1のデータのみが存在する状態になっています。
> > >
> > >
> > > ---------- テーブル構造ここから(DBはMySQLです) ----------
> > > CREATE TABLE aaa_tbl (
> > > id INT unsigned NOT NULL auto_increment,
> > > bbb_id INT unsigned NOT NULL default '0',
> > > ccc_id INT unsigned NOT NULL default '0',
> > > abc_flg CHAR(1) NOT NULL default '0',
> > > version_no INT unsigned NOT NULL default '1',
> > > update_datetime DATETIME NOT NULL default '0000-00-00 00:00:00',
> > > logical_delete_flg CHAR(1) NOT NULL default '0',
> > > PRIMARY KEY (id)
> > > ) TYPE=InnoDB;
> > > ---------- テーブル構造ここまで ----------
> > >
> > >
> > > 以上になります。
> > >
> > >
> > > 2008/04/30 16:50 kubo <[E-MAIL ADDRESS DELETED]>:
> > >
> > >
> > > > 久保です。
> > > >
> > > > 森脇さん、こんにちは
> > > >
> > > > 申し訳ありませんが、
> > > > UTのテストコードを差し支えない範囲で
> > > > 見せて頂けますでしょうか?
> > > > (あとデータベースのテーブル構造や
> > > > データがどのような状況なのか)
> > > >
> > > > ログで
> > > >
> > > > {999,null,null,null,null,null,null}
> > > > とあるので、999のレコードは存在しないPK値なのかどうか?
> > > > とか、VERSION_NOカラムはどう扱っているのか?
> > > > などなど気になる点があります。
> > > > 情報頂けましたら、詳細な回答ができると思います。
> > > >
> > > > 2008/4/30 k. moriwaki <[E-MAIL ADDRESS DELETED]>:
> > > >
> > > >
> > > > > 森脇と申します。
> > > > > BehaviorのdeleteNonstrictの挙動について質問です。
> > > > >
> > > > > Seasar Conference 2007 Autumnの「現場ソリューションDBFlute.pdf」を
> > > > > 参考にしているのですが、103ページに記載されている「Behaviorの更新系メソッド」の
> > > > > 注意書きで
> > > > > updateNonstrict()とdeleteNonstrict()は、対象のEntityが存在しない場合に
> > > > > EntityAlreadyDeletedException が発生します。
> > > > > とあるのですが、UTを作成して実行してみるとEntityAlreadyUpdatedExceptionが
> > > > > 発生します。
> > > > >
> > > > > 環境と発生時のログは以下になります。
> > > > > なにか設定が必要なのでしょうか?自動生成時のプロパティファイルは0.6.9に付属していた
> > > > > ファイルをほぼそのまま使っています。
> > > > >
> > > > > 環境
> > > > > Seasar 2.4.25
> > > > > S2Dao 1.0.48
> > > > > DBFlute 0.6.9
> > > > >
> > > > > ログ
> > > > > hoge.fugo.db.common.exception.EntityAlreadyUpdatedException:
> > > > > [EDAO0005]更新の対象は1行(実際:0)でなければなりません。({999,null,null,null,null,null,null})
> > > > > at hoge.fugo.db.common.s2dao.S2DaoInterceptor.dispatchInvoking(S2DaoInterceptor.java:134)
> > > > > at hoge.fugo.db.common.s2dao.S2DaoInterceptor.invoke(S2DaoInterceptor.java:67)
> > > > > at hoge.fugo.db.exdao.AaaDao$$EnhancedByS2AOP$$1f365b2$$MethodInvocation$$deleteNonstrict12.proceed(MethodInvocationClassGenerator.java)
> > > > > at hoge.fugo.db.exdao.AaaDao$$EnhancedByS2AOP$$1f365b2.deleteNonstrict(AaaDao$$EnhancedByS2AOP$$1f365b2.java)
> > > > > at hoge.fugo.db.bsbhv.BsAaaBhv.delegateDeleteNonstrict(BsAaaBhv.java:461)
> > > > > at hoge.fugo.db.bsbhv.BsAaaBhv$11.callbackDelegateDeleteNonstrict(BsAaaBhv.java:333)
> > > > > at hoge.fugo.db.bsbhv.BsAaaBhv$11.callbackDelegateDeleteNonstrict(BsAaaBhv.java:332)
> > > > > at hoge.fugo.db.common.bhv.AbstractBehaviorWritable.helpDeleteNonstrictInternally(AbstractBehaviorWritable.java:251)
> > > > > at hoge.fugo.db.bsbhv.BsAaaBhv.deleteNonstrict(BsAaaBhv.java:332)
> > > > > at hoge.fugo.tender.logic.impl.AaaLogicImpl.deleteAaa(AaaLogicImpl.java:91)
> > > > > at hoge.fugo.tender.logic.impl.AaaLogicImplTest.testDeleteAaa_2(AaaLogicImplTest.java:128)
> > > > > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> > > > > at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> > > > > at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> > > > > at java.lang.reflect.Method.invoke(Method.java:597)
> > > > > at org.seasar.framework.unit.S2TestMethodRunner.executeMethodBody(S2TestMethodRunner.java:678)
> > > > > at org.seasar.framework.unit.S2TestMethodRunner.executeMethod(S2TestMethodRunner.java:653)
> > > > > at org.seasar.framework.unit.S2TestMethodRunner.runTest(S2TestMethodRunner.java:619)
> > > > > at org.seasar.framework.unit.S2TestMethodRunner.runMethod(S2TestMethodRunner.java:255)
> > > > > at org.seasar.framework.unit.S2TestMethodRunner.run(S2TestMethodRunner.java:171)
> > > > > at org.seasar.framework.unit.S2TestClassMethodsRunner.invokeTestMethod(S2TestClassMethodsRunner.java:227)
> > > > > at org.seasar.framework.unit.S2TestClassMethodsRunner.run(S2TestClassMethodsRunner.java:89)
> > > > > at org.seasar.framework.unit.S2TestClassRunner.run(S2TestClassRunner.java:67)
> > > > > at org.seasar.framework.unit.Seasar2.run(Seasar2.java:168)
> > > > > at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:38)
> > > > > at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
> > > > > at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
> > > > > at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
> > > > > at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
> > > > > at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
> > > > > _______________________________________________
> > > > > Seasar-user mailing list
> > > > > [E-MAIL ADDRESS DELETED]
> > > > > https://ml.seasar.org/mailman/listinfo/seasar-user
> > > > >
> > > > _______________________________________________
> > > > Seasar-user mailing list
> > > > [E-MAIL ADDRESS DELETED]
> > > > https://ml.seasar.org/mailman/listinfo/seasar-user
> > > >
> > > _______________________________________________
> > > Seasar-user mailing list
> > > [E-MAIL ADDRESS DELETED]
> > > https://ml.seasar.org/mailman/listinfo/seasar-user
> > >
> > _______________________________________________
> > Seasar-user mailing list
> > [E-MAIL ADDRESS DELETED]
> > https://ml.seasar.org/mailman/listinfo/seasar-user
> >
> _______________________________________________
> Seasar-user mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-user
>
Seasar-user メーリングリストの案内