[英]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.