[Seasar-user:13170] Re: 【DBFlute】ConditionBeanのSQLにスキーマ名を付けたい
kubo
[E-MAIL ADDRESS DELETED]
2008年 3月 6日 (木) 15:36:49 JST
久保です。
森さん、ご報告ありがとうございます。
しばらくその修正で対応お願いします。
次バージョンに正式に含めたいと思いますが、
プロジェクトの都合としてリリース時期の要望はありますでしょうか?
2008/3/6 森和紀 <[E-MAIL ADDRESS DELETED]>:
> 久保さん
>
> お世話になっております。森です。
>
> 問題なく、スキーマつきのSQLが発行されるようになりました。
> すばやい対応ありがとうございます。
>
>
>
> 以上です。
>
> 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 mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-user
>
Seasar-user メーリングリストの案内