[Seasar-user:19302] Re: EntityRowHandler#handle()におけるデータ操作について
[E-MAIL ADDRESS DELETED]
[E-MAIL ADDRESS DELETED]
2010年 2月 12日 (金) 18:37:17 JST
久保さま
お世話になっております.松原です.
>DBFlute-0.9.6.5-RC3を出しました。
>もし、よければという感じですが、
>そちらのプロジェクトで適用してみて頂けないでしょうか?
>http://d.hatena.ne.jp/jflute/20100209/1265711451
⇒ 大変有難うございます.早速使用させて頂きます.
こちらの都合で申し訳ございませんが,来週の月曜に,こちらの環境へ配布して
ご報告は,早くとも2/17くらいになると思いますが,よろしいでしょうか?
以上です.宜しくお願い致します.
>
>リリース間近ですが、できればSNAPSHOT以降の修正が
>松原さんのプロジェクトでフィットするかどうかを
>確認してからリリースしたいなと。
>
>2010/2/8 kubo <[E-MAIL ADDRESS DELETED]>:
>> 久保(jflute)です。
>>
>> 松原さん、ご確認ありがとうございます!
>> もろもろ整理したら正式版リリースしますので、
>> それまではそのSNAPSHOTバンバン叩いておいて下さい。
>>
>> 2010/2/8 <[E-MAIL ADDRESS DELETED]>:
>>> 久保さま
>>>
>>> お世話になっております.松原です.
>>>
>>> 返信が遅くなり,申し訳ございません.
>>>
>>> ご提供頂いた,「DBFlute-0.9.6.5-SNAPSHOT」で,
>>> 問題なく動作致しました.
>>> また,当プロジェクトは開発中ですので,アップグレード可能です.
>>>
>>> 申し訳ございませんが,正式版への適用を宜しくお願い致します.
>>>
>>> 以上です.
>>>
>>>
>>>>久保(jflute)です。
>>>>
>>>>松原さん、こんばんは
>>>>
>>>>こちらでも再現いたしました。
>>>>DBMSによっては発生したりしなかったりしますが、
>>>>これはDBFluteのバグです。
>>>>フィードバックありがとうございます。
>>>>
>>>>もし、可能であれば、
>>>> モジュール:DBFlute-0.9.6.5-SNAPSHOT
>>>> ランタイム:0.9.6.5-03-SNAPSHOT
>>>>にアップグレードして試して頂けますでしょうか?
>>>>動作問題なければ、明らかなバグですので、
>>>>近日リリースをしたいと考えます。
>>>>
>>>>もし、開発プロジェクトでアップグレードができない
>>>>状況であれば、選択肢 "1" のやり方か、もしくは、
>>>>カーソル検索をConditionBeanでなくOutsideSql方式に
>>>>差し替えてみて下さい。(OutsideSqlであれば動作します)
>>>>ちなみに選択肢 "2" は、そもそもメモリ節約のために
>>>>カーソル検索しているのに無意味なことになってしまいます。
>>>>
>>>>
>>>>2010/2/5 <[E-MAIL ADDRESS DELETED]>:
>>>>>
>>>>> お世話になっております.松原です.
>>>>>
>>>>>
>>>>> 掲題の件,以下の実装でエラーが発生してしまいます.
>>>>>
>>>>> 解決方法などありましたら、ご教示して頂けないでしょうか.
>>>>>
>>>>>
>>>>> <環境>
>>>>> Java :JRE 1.6.0_13
>>>>> DBFlute:DBFlute 0.9.6
>>>>>
>>>>> <目的>
>>>>> EntityRowHandler#handle()内でデータ登録/更新を行いたい.
>>>>>
>>>>> <理由>
>>>>> 大量データから別のテーブルへの登録/削除を行うような処理
>>>>> を行いたい.
>>>>>
>>>>> <現象>
>>>>> EntityRowHandler#handle()内で別のBehaviorからデータ登録
>>>>> を行うと,1回目のInsertは正常にログ出力されるが,カーソル
>>>>> の次データ取得でエラーが発生している.
>>>>>
>>>>> <質問>
>>>>> EntityRowHandler#handle()内で別のBehaviorを使用することは
>>>>> できないのでしょうか?
>>>>>
>>>>> できない場合,
>>>>> ①大量データのPrimaryKeyのみを取得し,PrimaryKeyからのループ
>>>>> 処理内で詳細データ取得+データ登録を行う
>>>>>
>>>>> ②EntityRowHandler#handle()内で登録データを配列で保持し,
>>>>> Behavior#batchInsert()で一気にデータ登録
>>>>>
>>>>> の2方式しかないのでしょうか?
>>>>>
>>>>> 大変申し訳ございませんが,ご教示の程,宜しくお願い致します.
>>>>>
>>>>> <実装例>
>>>>> final EntityRowHandler<YyyXxx> xxxHandler = new EntityRowHandler<YyyXxx>() {
>>>>> @Override
>>>>> public void handle(YyyXxx xxx) {
>>>>> TestYyyXxx dt = new TestYyyXxx();
>>>>> dt.setXxxId(xxx.getXxxId());
>>>>> testYyyXxxBhv.insert(dt); // データ登録
>>>>>
>>>>> ArrayList<String[]> data = new ArrayList<String[]>();
>>>>> data.add(new String[] {xxx.getXxxId(), xxx.getPoleId()});
>>>>> }
>>>>> };
>>>>>
>>>>> final YyyXxxCB cb = new YyyXxxCB();
>>>>> cb.query().setXxxType_Equal("620000001923");
>>>>>
>>>>> yyyXxxBhv.selectCursor(cb, xxxHandler);
>>>>>
>>>>> <ログ>
>>>>> DEBUG 2010.02.05 11:24:13.062,/==============================================================================
>>>>> DEBUG 2010.02.05 11:24:13.062, YyyXxxBhv.selectCursor()
>>>>> DEBUG 2010.02.05 11:24:13.062, ========================/
>>>>> DEBUG 2010.02.05 11:24:13.062,
>>>>> DEBUG 2010.02.05 11:24:13.125,論理的なコネクションを取得しました。tx=[FormatId=4360, GlobalId=1265336652375/0, BranchId=]
>>>>> DEBUG 2010.02.05 11:24:13.125,
>>>>> (***)※1
>>>>>
>>>>> DEBUG 2010.02.05 11:24:13.421,...Setting up column columns of CNETS_OCW_JBOX before INSERT!
>>>>> DEBUG 2010.02.05 11:24:13.421,...Initializing sqlExecution for the key 'CNETS_OCW_JBOX:insert(TestYyyXxx)'
>>>>> DEBUG 2010.02.05 11:24:13.421,論理的なコネクションを取得しました。tx=[FormatId=4360, GlobalId=1265336652375/0, BranchId=]
>>>>> DEBUG 2010.02.05 11:24:13.421,論理的なコネクションを閉じました。tx=[FormatId=4360, GlobalId=1265336652375/0, BranchId=]
>>>>> DEBUG 2010.02.05 11:24:13.468,SqlExecution Initialization Cost: [00m00s047ms]
>>>>> DEBUG 2010.02.05 11:24:13.468,/=============================================================================
>>>>> DEBUG 2010.02.05 11:24:13.468, TestYyyXxxBhv.insert()
>>>>> DEBUG 2010.02.05 11:24:13.468, =======================/
>>>>> DEBUG 2010.02.05 11:24:13.468,
>>>>> DEBUG 2010.02.05 11:24:13.468,論理的なコネクションを取得しました。tx=[FormatId=4360, GlobalId=1265336652375/0, BranchId=]
>>>>> DEBUG 2010.02.05 11:24:13.468,
>>>>> (***)※2
>>>>>
>>>>> DEBUG 2010.02.05 11:24:13.484,論理的なコネクションを閉じました。tx=[FormatId=4360, GlobalId=1265336652375/0, BranchId=]
>>>>> DEBUG 2010.02.05 11:24:13.484,===========/ [00m00s016ms result=1]
>>>>> DEBUG 2010.02.05 11:24:13.484,
>>>>> WARN 2010.02.05 11:24:13.500,SQLException occurred while ResultSet Handling: target=YyyXxx.xxxType
>>>>> DEBUG 2010.02.05 11:24:13.515,論理的なコネクションを閉じました。tx=[FormatId=4360, GlobalId=1265336652375/0, BranchId=]
>>>>> DEBUG 2010.02.05 11:24:13.531,トランザクションをロールバックしました。tx=[FormatId=4360, GlobalId=1265336652375/0, BranchId=]
>>>>> ERROR 2010.02.05 11:24:13.578,BATCH,BridgeBatchApplication,run,CDL-E-00007,例外が発生しました。詳細はログを確認してください。
>>>>> org.seasar.dbflute.exception.SQLFailureException: Look! Read the message below.
>>>>> /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
>>>>> The SQL failed to execute!
>>>>>
>>>>> [Advice]
>>>>> Please confirm the SQLException message.
>>>>>
>>>>> [SQLState]
>>>>> null
>>>>>
>>>>> [ErrorCode]
>>>>> 17006
>>>>>
>>>>> [SQLException]
>>>>> java.sql.SQLException
>>>>> 列名が無効です。
>>>>>
>>>>> [Statement]
>>>>> org.seasar.extension.jdbc.impl.PreparedStatementWrapper
>>>>>
>>>>> [Display SQL]
>>>>> (***)※3
>>>>>
>>>>> * * * * * * * * * */
>>>>> at org.seasar.dbflute.resource.SQLExceptionHandler.throwSQLFailureException(SQLExceptionHandler.java:199)
>>>>> at org.seasar.dbflute.resource.SQLExceptionHandler.handleSQLException(SQLExceptionHandler.java:57)
>>>>> at org.seasar.dbflute.s2dao.sqlhandler.TnBasicHandler.handleSQLException(TnBasicHandler.java:235)
>>>>> at org.seasar.dbflute.s2dao.sqlhandler.TnBasicHandler.handleSQLException(TnBasicHandler.java:230)
>>>>> at org.seasar.dbflute.s2dao.sqlhandler.TnBasicSelectHandler.execute(TnBasicSelectHandler.java:77)
>>>>> at org.seasar.dbflute.s2dao.sqlhandler.TnBasicSelectHandler.execute(TnBasicSelectHandler.java:63)
>>>>> at org.seasar.dbflute.bhv.core.execution.SelectCBExecution.execute(SelectCBExecution.java:74)
>>>>> at org.seasar.dbflute.bhv.core.BehaviorCommandInvoker.executeSql(BehaviorCommandInvoker.java:320)
>>>>> at org.seasar.dbflute.bhv.core.BehaviorCommandInvoker.dispatchInvoking(BehaviorCommandInvoker.java:174)
>>>>> at org.seasar.dbflute.bhv.core.BehaviorCommandInvoker.invoke(BehaviorCommandInvoker.java:140)
>>>>> at org.seasar.dbflute.bhv.AbstractBehaviorReadable.invoke(AbstractBehaviorReadable.java:923)
>>>>> at jp.co.kyuden.cnets.batch.sample.TestDao2Batch.execute(TestDao2Batch.java:76)
>>>>> at com.anygis.ri.client.startup.StartupUtils.runApplications(StartupUtils.java:302)
>>>>> at com.anygis.ri.client.startup.StartupUtils.runBatchApplication(StartupUtils.java:116)
>>>>> at com.anygis.ri.client.batch.DefaultBatchApplication.run(DefaultBatchApplication.java:137)
>>>>> at com.anygis.ri.client.batch.AnyGISBatchApplication.<init>(AnyGISBatchApplication.java:57)
>>>>> at com.anygis.ri.client.batch.AnyGISBatchApplication.main(AnyGISBatchApplication.java:31)
>>>>> 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 com.anygis.components.client.BatchApplication.main(BatchApplication.java:39)
>>>>> Caused by: java.sql.SQLException: 列名が無効です。
>>>>> at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
>>>>> at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:146)
>>>>> at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:208)
>>>>> at oracle.jdbc.driver.OracleStatement.getColumnIndex(OracleStatement.java:3296)
>>>>> at oracle.jdbc.driver.OracleResultSetImpl.findColumn(OracleResultSetImpl.java:1914)
>>>>> at oracle.jdbc.driver.OracleResultSet.getString(OracleResultSet.java:1515)
>>>>> at org.seasar.dbflute.s2dao.valuetype.registered.StringType.getValue(StringType.java:42)
>>>>> at org.seasar.dbflute.s2dao.extension.TnRowCreatorExtension.getValue(TnRowCreatorExtension.java:169)
>>>>> at org.seasar.dbflute.s2dao.extension.TnRowCreatorExtension.createRow(TnRowCreatorExtension.java:124)
>>>>> at org.seasar.dbflute.s2dao.rshandler.TnAbstractBeanMetaDataResultSetHandler.createRow(TnAbstractBeanMetaDataResultSetHandler.java:85)
>>>>> at org.seasar.dbflute.s2dao.rshandler.TnBeanListMetaDataResultSetHandler.mappingBean(TnBeanListMetaDataResultSetHandler.java:108)
>>>>> at org.seasar.dbflute.s2dao.rshandler.TnBeanCursorMetaDataResultSetHandler.handle(TnBeanCursorMetaDataResultSetHandler.java:56)
>>>>> at org.seasar.dbflute.s2dao.sqlhandler.TnBasicSelectHandler.execute(TnBasicSelectHandler.java:91)
>>>>> at org.seasar.dbflute.s2dao.sqlhandler.TnBasicSelectHandler.execute(TnBasicSelectHandler.java:75)
>>>>> ... 21 more
>>>>>
>>>>>
>>>>> ※1:Select文(カーソルオープン)
>>>>> ※2:Insert文(testYyyXxxBhv.insert(dt);)
>>>>> ※3:※1と同様のSQL
>>>>>
>>>>>
>>>>>
>>>>> 以上.長文で申し訳ございません.
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> 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 メーリングリストの案内