我需要hibernate来生成类似于这个INSERT INTO table_a (a_id, a_name) VALUES (5, 'a5'),(6, 'a6');的sql。
使用这种sql,您可以添加带有1条语句的2行。我可以
a_id, a_name
------------------
5 a5
6 a6在hibernate中,当您将one保存到多个关系时,hibernate将使用多个insert语句进行插入。这将导致如果使用HQL将1000行插入到1个表中,则会导致如下所示:
INSERT INTO scoring.table_a (`a_id`, `a_name`) VALUES (1, 'a');
INSERT INTO scoring.table_a (`a_id`, `a_name`) VALUES (2, 'a');
....
...
..
INSERT INTO scoring.table_a (`a_id`, `a_name`) VALUES (1000, 'a');经过的时间是:
Executed 1,000 queries; elapsed time (seconds) - Total: 0.78, SQL query: 0.78, Building output: 0当我使用相同的值进行测试时,使用SQL INSERT INTO table_a (a_id, a_name) VALUES (5, 'a'),(6, 'a'),(),...,...,(1000, 'a');会导致这样的运行时间:
Query 1 of 1, Rows read: 0, Elapsed time (seconds) - Total: 0.02, SQL query: 0.02, Building output: 0我测试的结果是,1条1000值的语句(0.02s)的比1000 insert语句快39倍,每个语句都有一个值(0.78s),就像hibernate一样。因此,是否有一种方法可以使HQL生成类似于insert或update的SQL。或者这意味着我们必须覆盖hibernate方言?
谢谢你的暗示
发布于 2013-08-23 14:52:58
HQL只支持插入到………。选择………;没有机会将插入写入………值,我的意思是在编写insert查询时,我们需要从其他表中选择值,我们不能手动插入自己的值。(见文件和这)
发布于 2013-08-15 11:29:13
您可以将hibernate.jdbc.batch_size属性设置为非零值。它将允许Hibernate使用批处理插入。看看正式文件。
下面的代码是如何通过Hibernate使用JDBC批处理插入的示例:
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
for ( int i=0; i < 10000; i++ ) {
RecordA record = new RecordA(.....);
session.save(record);
if ( i % BATCH_SIZE == 0 ) { // BATCH_SIZE is your choice, but equal to property
//flush a batch of inserts and release memory:
session.flush();
session.clear();
}
}
tx.commit();
session.close();在这里也会讨论:Hibernate批量混淆
发布于 2022-01-11 04:11:44
关于Hibernate文档中的批处理,有一个非常好的章节。
设置属性
hibernate.jdbc.batch_size 20然后使用以下代码
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
for ( int i=0; i<100000; i++ ) {
Customer customer = new Customer(.....);
session.save(customer);
if ( i % 20 == 0 ) { //20, same as the JDBC batch size
//flush a batch of inserts and release memory:
session.flush();
session.clear();
}
}
tx.commit();
session.close();根据您的需要从上面的代码中提取customer对象。
https://stackoverflow.com/questions/17862180
复制相似问题