【发布时间】:2014-06-10 03:09:39
【问题描述】:
我有一个批处理操作,我必须插入或更新记录。我想插入更多的记录,所以我需要一个接一个地提交一个批
1)如果是新的则插入
2)如果存在则更新。
我通常可以使用
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
for ( int i=0; i<100000; i++ ) {
Customer customer = new Customer(.....);
session.saveOrUpdat(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();
问题是休眠在每个 saveOrUpdate 之前生成一个选择,这似乎是一个问题。
对象的primarykey总是在传递给hibernate之前填充。因为它的primaryKey永远不会由hibernate使用sequencer或其他任何东西生成。
我怎样才能避免每次保存或更新的这种额外选择?
我不想使用存储过程。
【问题讨论】: