【发布时间】:2012-05-21 10:41:14
【问题描述】:
嗨,我有一个应用程序,我首先检查 DB 表中的值,如果不存在,则生成一个新值并插入到 DB 中,这个循环大约一百万次,我怎样才能加快它的速度??
p>在我的工人阶级中:-
session=HibernateSessionFactory.getSession();
for(----loop
i check
i generate
then:-
MyTable myTable=new MyTable();
myTable.setName("dasdas");
myTable.setww("ss");
myTable.setaa("daaasdas");
hibernateRepositoy.save(dgCcno,session);
}
保存其他类的方法:-
public void save(Object obj,Session session) {
Transaction tx = null;
try {
tx = session.beginTransaction();
session.saveOrUpdate(obj);
session.flush();
session.clear();
tx.commit();
}
catch (HibernateException e) {
e.printStackTrace();
logger.error(e.getMessage(), e);
if(tx!=null){
tx.rollback();
}
}
catch (Exception e) {
e.printStackTrace();
logger.error(e.getMessage(), e);
}
}
我怎样才能加快速度,或者这是正确的方法?
补充:- 我不能使用批量更新,我必须立即插入值,因为下一个选择查询中的值可能相同......然后必须从数据库中给出值
【问题讨论】:
-
您可以使用休眠批处理。有关详细信息,请参阅stackoverflow.com/questions/8972853/…。
-
@tibtof 不,我不能,我必须立即插入值,因为下一个选择查询中的值可能是相同的......然后必须从数据库中给出值
-
你必须马上提交吗?我认为如果你只使用一笔交易,它会快得多。
-
是因为如果我不提交,并且选择查询中的下一个值是相同的,所以它将生成相同的值再次插入..
-
尝试将您的事务隔离级别更改为未提交读取