java

位置:IT落伍者 >> java >> 浏览文章

Hibernate大数据量操作方案


发布日期:2024年02月25日
 
Hibernate大数据量操作方案

阅读了Hibernate的Reference之后可以采用批量处理的方法当插入的数据超过就flush session并且clear

下面是一个测试method

/** */ /**

* 测试成批插入数据的事务处理返回是否成功

*

*@paramobjPO Object

*@returnboolean

*/

public booleaninsertBatch( finalObject objPO) {

booleanisSuccess= false ;

Transaction transaction= null ;

Session session=openSession();

try{

transaction=sessionbeginTransaction();

for( inti= ; i< ; i ++ ) {

sessionsave(objPO);

if(i% == ) {

//flush a batch of inserts and release memory

sessionflush();

sessionclear();

}

}

mit();

( transactionwasCommitted:

+transactionwasCommitted());

isSuccess= true ;

} catch(HibernateException ex) {

if(transaction!= null ) {

try{

transactionrollback();

loggererror( transactionwasRolledBack:

+transactionwasRolledBack());

} catch(HibernateException ex) {

loggererror(exgetMessage());

exprintStackTrace();

}

}

loggererror( Insert Batch PO Error: +exgetMessage());

exprintStackTrace();

} finally{

if(transaction!= null ) {

transaction= null ;

}

sessionclose();

}

returnisSuccess;

}

这只是简单的测试实际项目中遇到的问题要比这个复杂得多

这时候我们可以让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);

sessionflush();

sessionclear();

(good job!);

}

}

每做一次数据操作就更新一次Session这样可以保证每次数据操作都成功否则就让Spring去控制 它roll back吧

最后记得关闭Session

Session session=openSession();

doBusiness(session);

sessionclose();// 关闭session

至于处理速度呢不会慢到哪儿去的已经试验过了; )

还等什么赶快试试吧!

上一篇:JUnit学习笔记之NetBeans入门篇

下一篇:spring security3.1 不再支持 filters=none 解决办法