1

我有如下所列的映射。

当我更新一个分离的类别项目(它不包含任何来自 dto 转换器的 Hibernate 类)时,我注意到 Hibernate 将首先删除所有雇主工资实例(集合链接),然后插入所有雇主工资条目 ONE-BY -一 :(...

我知道它必须删除然后插入所有条目,因为它已完全分离。

但是,我不明白的是,为什么 Hibernate 不通过批量插入插入所有条目?.. 那就是:在一个 SQL 语句中插入所有雇主工资条目?

如何告诉 Hibernate 使用批量插入?(如果可能的话)。我尝试使用以下值,但没有发现任何区别:

hibernate.jdbc.batch_size=30

我的映射片段:

<class name="com.sample.CategoriesDefault" table="dec_cats" >
 <id name="id" column="id" type="string" length="40" access="property">
  <generator class="assigned" />
 </id>
 <component name="incomeInfoMember" class="com.sample.IncomeInfoDefault">
   <property name="hasWage" type="boolean" column="inMemWage"/>
    ...
   <component name="wage" class="com.sample.impl.WageDefault">
     <property name="hasEmployerWage" type="boolean" column="inMemEmpWage"/>
      ...
     <set name="employerWages" cascade="all-delete-orphan" lazy="false">
      <key column="idCats" not-null="true" />
      <one-to-many entity-name="mIWaEmp"/>
     </set>
   </component>
 </component>
</class>
4

1 回答 1

0

Bulk-insert - 用于快速插入的特定本机方式,通常用于本机外部工具,例如用于 MS SQL 的 bcp.exe。您正在谈论Batch-insert,请尝试使用以下示例代码:

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();
于 2011-11-13T09:44:09.357 回答