使用Hibernate在数据库中保存多个记录

时间:2012-01-19 12:52:40

标签: hibernate

我希望使用Hibernate在DB中保存多个记录。我成功了。但是我认为我的方法是错误的。因为如果记录增加,它将产生性能问题。

我想存储在DB中,

FirstName          LastName   
FNameABC           LNameCC         
FNamePQR           LNameDD         
FNameXYZ           LNameEE 

我将上述值存储在DB中,

Iterator itr = list.Iterator();
while(itr.hasNext()) {
   Test t = (Test)itr.next();
   dbEntity.setFirstName(t.setFirstName());
   dbEntity.setLastName(t.setLastName());
   session.beginTransaction();
   session.save(dbEntity);
   session.getTransaction().commit();
   session.close();
}  

这里我将循环中的值保存在会话中。因此,每次记录每次都会调用beginTransaction()save()commit()。 有没有更好的方法?

2 个答案:

答案 0 :(得分:3)

请查看此页:http://docs.jboss.org/hibernate/core/3.3/reference/en/html/batch.html

您应该打开一个事务,保存实体(在循环中),最后提交事务并关闭会话。 根据建议,您可以在循环时使用计数器,并在达到某个数字后闪烁/清理会话 - 定期。

答案 1 :(得分:2)

您不会根据技术或性能考虑因素选择启动和提交事务。您选择基于您认为应该以原子方式,连贯性和独立于其他事务的方式执行此操作。阅读http://en.wikipedia.org/wiki/ACID

如果要确保所有插入成功或失败,但是您不应该处于一半成功而另一半失败的状态,那么您的事务应该封装所有插入:您启动事务在第一个之前,在最后一个之后提交它。

相反,如果您希望每个插入都在其自己的事务中完成,并且例如能够捕获异常(如果一个失败但是继续插入其他插入),则每个插入应该在其自己的事务中完成,就像你在做。