簡體   English   中英

hibernate nativesqlquery批量插入

[英]hibernate nativesqlquery batch insert

由於不需要泄露的原因,我需要使用hibernate層運行一系列本機SQL語句。 它們是“insert abc(column1,column2)values(:column1List,:column2List)”形式的相同語句(相同的綁定變量)。

如果可能的話,我想將其作為批量插入執行。 可以嗎? 如果是這樣的話?

我試過sqlQuery = session.createSQLQuery(sqlQuery); sqlQuery.setParameterList(.....) sqlQuery = session.createSQLQuery(sqlQuery); sqlQuery.setParameterList(.....)

我想我找到了原因,但我不確定發生了什么。 insert語句有兩列以上,hibernate將其更改為插入到abc(column1,column2,column3,column4,column5,column6)值(?,?,(?,?),(?,?),(? ,?),?)

您可能希望將JDBC用於批量插入,這將消除與hibernate相關的開銷,並允許您處理預定義參數列表

import java.sql.Connection;
import java.sql.PreparedStatement;

//...

String sql = "insert into employee (name, city, phone) values (?, ?, ?)";
org.hibernate.Session sess = (org.hibernate.Session) em.getDelegate();
Connection conn = sess.connection();
PreparedStatement ps = connection.prepareStatement(sql);

for (Employee employee: employees) {

    ps.setString(1, employee.getName());
    ps.setString(2, employee.getCity());
    ps.setString(3, employee.getPhone());
    ps.addBatch();
}
ps.executeBatch();
ps.close();
connection.close();

例子來自( http://viralpatel.net/blogs/batch-insert-in-java-jdbc/

我正在休眠4.1.4。 我嘗試了每一個我能想到的技巧讓它發揮作用。 因此我處於休眠狀態4.我不得不求助於實現一個工作“org.hibernate.jdbc.Work”的類。 一旦我有一個聲明處理,一切順利,我得到了我的答案。 DaveB概述了這種方法。

Transaction tx = session.beginTransaction() ;
  SqlWork sqlWork = new SQLWork(a,b,c) ; // used inside execute <br/>
  session.doWork(sqlWork) ;
  tx.commit();
} catch (HibernateException he) {
tx.rollback();
} finally {
session.close()
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM