[英]MyBatis 3.2.7 bulky BATCH insert is blocked
我遇到一個問題,我試圖將大約10,000條記錄的BATCH
插入13列的Oracle 11g表中。 Actually this is blocked if I try more than 1000 records.
同樣,對500條記錄的BATCH插入進行細粒度的測試也太慢了。
由於ORA-4031錯誤,BATCH正在數據庫上生成巨大的跟蹤文件。 每個會話中運行的SQL語句的長度超過80,000行,並以42,000個綁定變量作為輸入。
驅動程序: oracle.jdbc.driver.OracleDriver
我正在嘗試滿足要求:如果插入的任何數據無效,則必須回滾。
我的問題是:
有沒有一種方法可以告訴MyBatis將傳入的大批量分為小批,每個小批說10條記錄,將它們插入,但如果其中一個失敗則回滾所有批處理,並且僅在成功插入所有批處理時才提交?
還是有其他替代方法?
Below is the xml mapping for the insert:
<insert id="insertToTable" parameterType="java.util.List">
INSERT ALL
<foreach item="line" collection="list" >
<foreach item="lineItem"
collection="line.entrySet()" open="" close="" separator="">
into
TABLE_TEST_T
(col1, col2, col3, col4, col5,
col6, col7, col8, col9, col10,
col11, col12, col13)
values(
<!-- #{lineItem.item1, jdbcType=DATE}, -->
#{lineItem.item1, jdbcType=VARCHAR},
#{lineItem.item2, jdbcType=VARCHAR},
#{lineItem.item3, jdbcType=VARCHAR},
#{lineItem.item4, jdbcType=NUMERIC},
#{lineItem.item5, jdbcType=NUMERIC},
#{lineItem.item6, jdbcType=NUMERIC},
#{lineItem.item7, jdbcType=NUMERIC},
#{lineItem.item8, jdbcType=NUMERIC},
#{lineItem.item9, jdbcType=NUMERIC},
#{lineItem.item10, jdbcType=NUMERIC},
#{lineItem.item11, jdbcType=NUMERIC},
#{lineItem.item12, jdbcType=NUMERIC},
#{lineItem.item13, jdbcType=NUMERIC}
)
</foreach>
</foreach>
SELECT * FROM dual
</insert>
感謝您的反饋。
是的,您可以啟動事務並在發生錯誤時將其回滾,或者在沒有錯誤的情況下將其提交。 有許多方法可以管理Java應用程序中的事務
由於使用的是myBatis,因此可以查看SqlMapTransactionManager
。
我在路由中使用了駱駝EIP拆分器,並將查詢綁定在事務中。 可以在http://camel.465427.n5.nabble.com/Camel-Mybatis-2-13-1-BATCH-of-10-000-records-tt5756211.html中找到更多詳細信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.