当前位置: 首页 > 面试题库 >

在Hibernate中使用本机SQL批量插入

酆阳煦
2023-03-14
问题内容

我想使用Hibernate Native SQL在数据库中插入记录。代码如下

 Session session = sessionFactory.openSession();
 Transaction tx = session.beginTransaction();

String sqlInsert = "insert into sampletbl (name) values (?) ";
for(String name : list){
   session.createSQLQuery( sqlInsert )
          .setParameter(1,name)
          .executeUpdate();
} 
tx.commit();
session.close();

上面的代码工作正常,我认为这不是最好的方法。如果有的话,请给我另一种可能的方法。谢谢


问题答案:

Hibernate具有批处理功能。但是在以上情况下,我使用的是Native SQL,根据我的观察,hibernate批处理对于Native
SQL并不是很有效。是的,可以肯定的是它可以避免内存不足错误,但不会提高性能。因此,我退缩到在Hibernate中实现JDBC
Batch.Hibernate提供了doWork()从Hibernate Session获取连接的方法。

Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
//get Connction from Session
session.doWork(new Work() {
       @Override
       public void execute(Connection conn) throws SQLException {
          PreparedStatement pstmt = null;
          try{
           String sqlInsert = "insert into sampletbl (name) values (?) ";
           pstmt = conn.prepareStatement(sqlInsert );
           int i=0;
           for(String name : list){
               pstmt .setString(1, name);
               pstmt .addBatch();

               //20 : JDBC batch size
             if ( i % 20 == 0 ) { 
                pstmt .executeBatch();
              }
              i++;
           }
           pstmt .executeBatch();
         }
         finally{
           pstmt .close();
         }                                
     }
});
tx.commit();
session.close();


 类似资料:
  • 问题内容: 使用hibernate时,当我尝试使用以下方式启用批量插入时 我得到以下输出: 然后这个: 基本上没有。 我是否缺少设置? 问题答案: 原来在这种情况下缺少的是: 现在我明白了 频繁得多(任何大于1的值基本上都意味着它成功完成了批量插入)。 hibernate.jdbc.batch_versioned_data也可能有用。 jdbc:mysql:// localhost:3306 /

  • 问题内容: 我需要从每日CSV文件中消耗大量数据。CSV包含约12万条记录。使用hibernate模式时,这会减慢爬行速度。基本上,当使用saveOrUpdate()时,hibernate似乎在每个单独的INSERT(或UPDATE)之前执行SELECT。对于使用saveOrUpdate()持久存储的每个实例,在实际的INSERT或UPDATE之前发出SELECT。我能理解为什么要这样做,但是在进

  • 我是卡桑德拉的新人。我必须使用c#在卡桑德拉中一次性插入50000行。我正在使用卡桑德拉c#驱动程序。我正在使用以下代码在卡桑德拉中插入数据。请帮帮我 我收到错误:批处理中的语句无效:只允许UPDATE、INSERT和DELETE语句。

  • 问题内容: 我正在使用,并且 一直在尝试使用hibernate模式执行sql查询。我写过: 该查询不在数据库中执行。但是如果我写 相应的行将添加到表中。为什么hibernate不起作用,但是本机查询和JDBC一起起作用? 问题答案: 这应该对您有帮助。

  • 问题内容: 我有以下查询要插入到表中 得到消息 消息4860,级别16,状态1,行1 无法批量加载。文件“ c:\ Type.txt”不存在。 该文件显然在那里。我可能会忽略什么? 问题答案: 看一下: 无法批量加载。文件“ c:\data.txt”不存在 该文件在SQL Server的驱动器上吗? SQL BULK INSERT等始终只能与SQL Server计算机上的本地驱动器一起使用。您的S

  • 问题内容: 在MS SQL上,我可以使用以下sql命令进行批量插入: 现在我想在MySQL上做同样的事情,但是我似乎无法弄清楚它是如何工作的以及使用什么查询。 问题答案: 在MySQL中,等效项为 加载数据文件 http://dev.mysql.com/doc/refman/5.1/en/load- data.html