[Seasar-user:13168] Re: 【DBFlute】ConditionBeanのSQLにスキーマ名を付けたい

森和紀 [E-MAIL ADDRESS DELETED]
2008年 3月 6日 (木) 14:44:33 JST


久保さん

お世話になっております。森です。

対応ありがとうございます。
下記の件、確認してみます。

以上です。

08/03/06 に kubo<[E-MAIL ADDRESS DELETED]> さんは書きました:
> 久保です。
>
> 森さん
>
> ありがとうございます。
>
> お手数ですが、以下のことを試して頂けないでしょうか?
>
> mydbflute/dbflute-0.6.4/templates/om/java/配下のテンプレートを修正します。
>
> 1.cbean/AbstractBsConditionQuery.vmに以下を追加
>
>    public String getTableSqlName() {
>        return "${table.tableSqlName}";
>    }
>
> 2.cbean/BsConditionQuery.vmに以下の修正
>
> setupOuterJoin_${foreignKeys.foreignPropertyNameInitCap}()
> メソッドの最後のセンテンスのgetSqlClause().registerOuterJoin(...)
> の第一引数を
> getConditionQuery${foreignKeys.foreignPropertyNameInitCap}().getTableSqlName()
> に修正
>
> setupOuterJoin_${referrer.referrerPropertyNameInitCapAsOne}()
> メソッドも同様の部分を
> getConditionQuery${referrer.referrerPropertyNameInitCapAsOne}().getTableSqlName()
> に修正
>
> 3.allcommon/DBMetaInstanceHandler.vmに以下の処理を追加
>
> findDBMeta()の例外をthrowする手前で以下の部分を追加
>
>        ----- ここから
>        final int dotLastIndex = tableFlexibleName.lastIndexOf(".");
>        if (dotLastIndex >= 0) {
>            try {
>                return
> findDBMeta(tableFlexibleName.substring(dotLastIndex + 1));
>            } catch (IllegalStateException e) {
>                // Nothing
>            }
>        }
>       ----- ここまで
>        String msg = "The instance map returned null by the key: key="
> + tableFlexibleName + " instanceMap=" + _tableDbNameInstanceMap;
>        throw new IllegalStateException(msg);
>
> よろしくお願いします。
>
>
> 2008/3/6 森和紀 <[E-MAIL ADDRESS DELETED]>:
> > お世話になっています。森です。
> >
> >  現在でているログを記載します。
> >  ご確認ください。
> >
> >  <ログ>
> >  java.lang.IllegalStateException: The instance map returned null by the
> >  key: key=XXX instanceMap={XXX}
> >         at dbflute.allcommon.dbmeta.TcDBMetaInstanceHandler.findDBMeta(TcDBMetaInstanceHandler.java:340)
> >         at dbflute.allcommon.cbean.sqlclause.TcAbstractSqlClause.getSelectClause(TcAbstractSqlClause.java:203)
> >         at dbflute.allcommon.cbean.sqlclause.TcAbstractSqlClause.getClause(TcAbstractSqlClause.java:133)
> >         at dbflute.allcommon.cbean.TcAbstractConditionBean.toString(TcAbstractConditionBean.java:582)
> >         at java.lang.String.valueOf(Unknown Source)
> >         at java.lang.StringBuffer.append(Unknown Source)
> >         at dbflute.allcommon.util.TcTraceViewUtil.convertObjectArrayToStringView(TcTraceViewUtil.java:62)
> >         at dbflute.allcommon.s2dao.TcS2DaoInterceptor.dispatchInvoking(TcS2DaoInterceptor.java:142)
> >         at dbflute.allcommon.s2dao.TcS2DaoInterceptor.invoke(TcS2DaoInterceptor.java:70)
> >         at dbflute.exdao.XXXDao$$EnhancedByS2AOP$$2f7cfe$$MethodInvocation$$selectList3.proceed(MethodInvocationClassGenerator.java)
> >         at dbflute.exdao.XXXDao$$EnhancedByS2AOP$$2f7cfe.selectList(XXXDao$$EnhancedByS2AOP$$2f7cfe.java)
> >         at dbflute.bsbhv.BsXXXBhv.delegateSelectList(BsXXXBhv.java:708)
> >         at dbflute.bsbhv.BsXXXBhv.selectList(BsXXXBhv.java:266)
> >         at web.list.ListPage.doCreateFile(List01003Page.java:59)
> >         at web.list.ListPageTest.test_doCreateFile_正常_Tx(ListPageTest.java:50)
> >         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> >         at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
> >         at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
> >         at java.lang.reflect.Method.invoke(Unknown Source)
> >         at junit.framework.TestCase.runTest(TestCase.java:164)
> >         at org.seasar.framework.unit.S2FrameworkTestCase.doRunTest(S2FrameworkTestCase.java:324)
> >         at org.seasar.extension.unit.S2TestCase.doRunTest(S2TestCase.java:92)
> >         at org.seasar.framework.unit.S2FrameworkTestCase.runBare(S2FrameworkTestCase.java:188)
> >         at junit.framework.TestResult$1.protect(TestResult.java:106)
> >         at junit.framework.TestResult.runProtected(TestResult.java:124)
> >         at junit.framework.TestResult.run(TestResult.java:109)
> >         at junit.framework.TestCase.run(TestCase.java:120)
> >         at junit.framework.TestSuite.runTest(TestSuite.java:230)
> >         at junit.framework.TestSuite.run(TestSuite.java:225)
> >         at org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:128)
> >         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)
> >
> >  以上、よろしくお願いします。
> >
> >
> >
> >  08/03/06 に kubo<[E-MAIL ADDRESS DELETED]> さんは書きました:
> >  > 久保です。
> >  >
> >  > 森さん
> >  >
> >  > すいません、
> >  > ・DBMetaInstanceHandler#findDBMetaでIllegalStateExceptionが発生する。
> >  > の、スタックトレースを5行ほど教えていただけませんでしょうか?
> >  >
> >  > 2008/3/6 森和紀 <[E-MAIL ADDRESS DELETED]>:
> >  > > 久保様
> >  > >
> >  > >  お世話になっております。森です。
> >  > >
> >  > >  回答ありがとうございます。
> >  > >
> >  > >  > 回避策はないと思われますので、DBFluteの方を直します。
> >  > >  お手数をおかけして申し訳ありません。
> >  > >  対応よろしくお願いいたします。
> >  > >
> >  > >  以上です。
> >  > >
> >  > >  08/03/06 に kubo<[E-MAIL ADDRESS DELETED]> さんは書きました:
> >  > >
> >  > >
> >  > > > 久保です。
> >  > >  >
> >  > >  > 森さん、こんにちは
> >  > >  >
> >  > >  > 詳細な現象報告ありがとうございます。
> >  > >  > 回避策はないと思われますので、DBFluteの方を直します。
> >  > >  >
> >  > >  > > DBMetaInstanceHandler#findDBMetaでIllegalStateException
> >  > >  > DBMetaInstanceHandlerを修正することになりそうです。
> >  > >  > Schema名付きのキー値を指定されたら、そのスキーマ名で
> >  > >  > 該当のDBMetaを探し出すような仕組みにします。
> >  > >  >
> >  > >  > > 結合するテーブルにスキーマ名が付かない
> >  > >  > これはまさしく結合先テーブルを生成しているところで、
> >  > >  > スキーマ名の付いている方を利用するように修正します。
> >  > >  >
> >  > >  >
> >  > >  > 2008/3/6 森和紀 <[E-MAIL ADDRESS DELETED]>:
> >  > >  > > いつもお世話になっております。
> >  > >  > >  森と申します。
> >  > >  > >
> >  > >  > >  build.properties に下記を設定し、スキーマ名をつけたSQLは発行しているのですが、
> >  > >  > >  2点問題があります。
> >  > >  > >  torque.isAvailableAddingSchemaToTableSqlName = true
> >  > >  > >
> >  > >  > >  ・DBMetaInstanceHandler#findDBMetaでIllegalStateExceptionが発生する。
> >  > >  > >  原因は、このクラスに定義されているテーブル名にはスキーマ名はついておらず、
> >  > >  > >  検索するキーはスキーマ名付きのテーブル名となってしまうためです。
> >  > >  > >  ログを添付します。
> >  > >  > >
> >  > >  > >  ・結合するテーブルにスキーマ名が付かない。
> >  > >  > >  ConditionBean の setupSelect を行なったときに、結合先のテーブルにスキーマ名が
> >  > >  > >  付きません。
> >  > >  > >
> >  > >  > >  Version:DBFlute 0.6.4
> >  > >  > >
> >  > >  > >  上記2点の対応策などありましたら、ご教示ください。
> >  > >  > >
> >  > >  > >  以上、よろしくお願いいたします。
> >  > >  > >
> >  > >  > > _______________________________________________
> >  > >  > >  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 mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-user
>


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