[Seasar-user:19344] Re: EntityRowHandler#handle()におけるデータ操作について

kubo [E-MAIL ADDRESS DELETED]
2010年 2月 17日 (水) 23:24:20 JST


久保(jflute)です。

松原さん、ご確認ありがとうございます。
とても助かります。
今日、明日で何もなければ、そのRC3から
修正無しの状態でデプロイし直して正式版と
したいと思います。

2010/2/17  <[E-MAIL ADDRESS DELETED]>:
> 久保さま
>
>  お世話になっております.松原です.
>
> DBFlute-0.9.6.5-RC3をこちらのプロジェクトに適用させて頂き,
> 特に問題なく動作しております.
>
> 正式版リリースの件,宜しくお願い致します.
>
>
> 以上です.
>
>
>>久保(jflute)です。
>>
>>> こちらの都合で申し訳ございませんが,来週の月曜に,こちらの環境へ配布して
>>>  ご報告は,早くとも2/17くらいになると思いますが,よろしいでしょうか?
>>ありがとうございます。月曜日で、全然問題ありません。
>>(こちらが曜日の感覚を失ってるだけですので)
>>とても助かります。
>>
>>2010/2/12  <[E-MAIL ADDRESS DELETED]>:
>>> 久保さま
>>>
>>>
>>> お世話になっております.松原です.
>>>
>>>>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 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 メーリングリストの案内