我正在尝试检索超过300,000条记录,并使用Hibernate批处理更新数据库中的记录。它花了大约30分钟。我怎样才能减少时间?
这是我的Hibernate配置:
<property nane="connection.provider_class">org.jasypt.hibernate.connectionprovider.EncryptedPasswordDriverManagerConnectionProvider</property>
<property name="hibernate.connection.encryptor_registered_name">strongHibernateStringEncryptor</property>
<property name="hibernate.connection.driver_class">oracle.jdbc.pool.OracleDataSource</property>
<property name="hibernate.connection.url"></property>
<property name="hibernate.connection.username"></property>
<property name="hibernate.connection.password"></property>
<property name="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</property>
<property name="hibernate.default_schema"></property>
<property name="show_sql">true</property>
<property name="hibernate.jdbc.batch_size">50</property>
<property name="hibernate.order_inserts">true</property>
<property name="hibernate.order_updates">true</property>
<property name="hibernate.jdbc.batch_versioned_data">true</property>
<property name="hibernate.cache.use_query_cache">false</property>
<property name="hibernate.cache.use_second_level_cache">false</property>
我已经编写了2个Hibernate配置文件,用于连接2台服务器(Mock和UAT)。
我正在阅读字段定义表(FTD),它根据事务引用和进程号来维护字段名称及其值:
for (String srcTxn : bulkTxnSet) {
Criteria crit = sesMock.createCriteria(FTD.class);
crit.add(Restrictions.eq("txRefNo", srcTxn ));
crit.add(Restrictions.eq("processId", "001"));
// Here is updated code
ScrollableResults items = crit.scroll();
while ( items.next() ) {
FTD e = (FTD)items.get(0);
sesUAT.save(e);
if ( ++count % 50 == 0 ) {
sesUAT.flush();
sesUAT.clear();
}
}
}
我需要从模拟服务器获取FTD表数据并将其保存在UAT服务器中。