知识大全 Hibernate大数据量操作方案
Posted 操作
篇首语:志行万里者,不中道而辍足。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Hibernate大数据量操作方案相关的知识,希望对你有一定的参考价值。
Hibernate大数据量操作方案 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
阅读了Hibernate的Reference之后 可以采用批量处理的方法 当插入的数据超过 时 就flush session并且clear
下面是一个测试method
/** */ /**
* 测试成批插入数据的事务处理 返回是否成功
*
* @param objPO Object
* @return boolean
*/
public boolean insertBatch( final Object objPO)
boolean isSuccess = false ;
Transaction transaction = null ;
Session session = openSession();
try
transaction = session beginTransaction();
for ( int i = ; i < ; i ++ )
session save(objPO);
if (i % == )
// flush a batch of inserts and release memory
session flush();
session clear();
mit();
( transaction wasCommitted:
+ transaction wasCommitted());
isSuccess = true ;
catch (HibernateException ex)
if (transaction != null )
try
transaction rollback();
logger error( transaction wasRolledBack:
+ transaction wasRolledBack());
catch (HibernateException ex )
logger error(ex getMessage());
ex printStackTrace();
logger error( Insert Batch PO Error: + ex getMessage());
ex printStackTrace();
finally
if (transaction != null )
transaction = null ;
session close();
return isSuccess;
这只是简单的测试 实际项目中遇到的问题 要比这个复杂得多
这时候 我们可以让Spring来控制Transaction 自己来控制Hibernate的Session 随时更新数据
首先 利用HibernateDaoSupport类来自定义个方法打开Session
public Session openSession()
return getHibernateTemplate() getSessionFactory() openSession();
然后 用打开的Session处理你的数据
protected void doBusiness(Session session)
while (true)
//do your business with the opening session
someMethod(session);
session flush();
session clear();
( good job! );
每做一次数据操作 就更新一次Session 这样可以保证每次数据操作都成功 否则就让Spring去控制 它roll back吧
最后 记得关闭Session
Session session = openSession();
doBusiness(session);
session close(); // 关闭session
至于处理速度呢 不会慢到哪儿去的 已经试验过了 ; )
cha138/Article/program/Java/ky/201311/28270相关参考