我正在尝试使用Hibernate插入或更新大数据。我有一个包含350k对象的列表,当我使用Hibernate时saveOrUpdate(),要花费数小时才能插入所有数据。
saveOrUpdate()
我正在使用以下代码进行此操作。我的开发环境是JDK1.4和Oracle数据库。
public void saveAll(List list)throws HibernateException{ Session session = HibernateUtil.getEYSSession(); Iterator it = list.iterator(); int i = 0; while(it.hasNext()){ i++; Object obj = it.next(); session.saveOrUpdate(obj); if (i % 50 == 0) { session.flush(); session.clear(); } } }
我正在使用批处理更新,还设置了hibernate.jdbc.batch_size属性50,但这并没有帮助。
hibernate.jdbc.batch_size
我的对象与另一个对象具有一对一的关系,因此在这种情况下使用StatelessSession可能会出现问题。因为我认为StatelessSession不会级联到组成的对象。
您对saveOrUpdate()在这种情况下如何提高操作性能有任何想法吗?
谢谢。
对于每个saveOrUpdate操作,Hibernate select也会生成一条语句。我认为使用Hibernate的saveOrUpdate更新或插入大量数据根本不是一个好选择。我建议使用存储过程或移至SpringJDBCTemplate。
saveOrUpdate
select