您好我有一个应用程序,其中一个时间请求带有一个数组我必须从表中选择数据,如果没有找到生成新值并插入到表中,然后再次循环检查下一个值的统计信息等等。对于新的请求,这将完成大约50000次。休眠提交后,每次转换使其缓慢
我使用
public void save(Object obj,Session session) {
Transaction tx = null;
try {
tx = session.beginTransaction();
session.save(obj);
//session.saveOrUpdate(obj);
//session.flush();
session.clear();
tx.commit();
}
catch (HibernateException e) {
e.printStackTrace();
logger.error(e.getMessage(), e);
if(tx!=null){
tx.rollback();
}
}
}
方法来提交,它被称为对于每个新值generated.like对于每个请求它被称为50000次。 我必须为每个值提交事务,因为我不希望在表中生成重复值,所以如果新请求带有相同数据并且前一个正在运行,则应从表中提取该值。所以我认为我将不得不提交每个事务。但是,如果我使用传统的JDBC而不是休眠,这会变得相当快?我做错了什么是冬眠比较慢?因为我认为大部分时间都是在开始时被消耗并且一次又一次地进行交易。
我对此的理解相当有限,但为每个请求开放50000个新会话几乎都不是您想要做的事情。我建议将所有值保存为批处理。如果你担心重复,hashmap可能可以解决这个问题,但如果没有关于你的情况的更多信息,很难猜测。 – Tharwen
但会话只打开一次。开始和提交被称为大约50000次。 – Harinder
好的,但你为什么要单独保存每个项目? – Tharwen