hibernate nativesqlquery批量插入

Posted

技术标签:

【中文标题】hibernate nativesqlquery批量插入【英文标题】:hibernate nativesqlquery batch insert 【发布时间】:2014-01-27 17:13:02 【问题描述】:

出于不需要透露的原因,我需要使用hibernate层运行一系列原生SQL语句。它们是“insert abc(column1,column2) values(:column1List, :column2List)”形式的相同语句(相同的绑定变量)。

如果可能,我想将其作为批量插入执行。可以做到吗?如果有怎么办?

我试过了 sqlQuery = session.createSQLQuery(sqlQuery); sqlQuery.setParameterList(.....)

我想我找到了原因,但我不确定发生了什么。 insert 语句有超过 2 列,hibernate 将其更改为 insert into abc(column1, column2, column3, column4,column5, column6) 值(?,?, (?,?),(?,?),(? ,?),?)

【问题讨论】:

【参考方案1】:

您可能希望考虑使用 JDBC 进行批量插入,这将消除与休眠相关的开销并允许您处理预定义参数列表

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/)

【讨论】:

我使用的系统没有像您的示例中那样为我提供来自会话对象的连接。我正在从 hibernatesessionfactory 获取会话。你知道我怎样才能得到连接吗?还是我必须得到 entityManager ?如果是这样,我如何获得 entityManager ?谢谢...对休眠不太了解..我在休眠4.1.4 嗨 @EnderWiggin 是的,EntityManager 位可能与您的情况无关,但是一旦您掌握了 Hibernate 会话,其余部分应该是相同的【参考方案2】:

我在休眠 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()

【讨论】:

以上是关于hibernate nativesqlquery批量插入的主要内容,如果未能解决你的问题,请参考以下文章

Hibernate

Hibernate利用JDBC批操作

放出一批学生管理系统jsp源码,部分有框架

Hibernate 二级缓存在运行几个弹簧测试时关闭

有没有办法跟踪或获取 JPA 在由于 BatchUpdateException 而失败之前完成的批迭代总数?

HQL 是什么意思?