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

使用Hibernate在数据库中保存多条记录,hibernate,Hibernate,我想使用Hibernate在数据库中保存多条记录。我成功地做到了。但我认为我的方法是错误的。因为如果记录增加,它将产生性能问题 我想存储在DB中,比如 FirstName LastName FNameABC LNameCC FNamePQR LNameDD FNameXYZ LNameEE 我将上述值存储在DB中,如下所示: Iterator itr = list.Iter

我想使用Hibernate在数据库中保存多条记录。我成功地做到了。但我认为我的方法是错误的。因为如果记录增加,它将产生性能问题

我想存储在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();
}  
在这里,我将值保存在循环内的seession中。因此,每次对于每条记录,它都会调用
beginTransaction()
save()
commit()

有更好的方法吗?

请查看本页:

您应该打开一个事务,保存实体(在循环中),最后提交事务并关闭会话。
正如建议的那样,您可以在循环时使用计数器,并在达到一定数量后定期刷新/清理会话。

您不会基于技术或性能考虑而选择启动和提交事务。你选择基于你认为应该以原子、连贯和孤立的方式完成其他事务。阅读

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


相反,如果您希望每个插入都在自己的事务中完成,例如,如果一个插入失败但又插入了其他插入,那么每个插入都应该在自己的事务中完成,就像您正在做的一样。

您确定每个插入都应该在单独的事务中完成吗?使用这种方法处理大量实体时,有必要定期刷新和清除会话。大量实体的脏检很快就会成为瓶颈。具体取决于情况、实体数量、打开会话的数量。。。如果不发生这种情况,有时实施复杂的解决方案是不值得的。我的回答只是针对特定的情况。我同意在极端情况下,应考虑采取不同的方法。