一尘不染

休眠保存或更新大数据

hibernate

我正在尝试使用Hibernate插入或更新大数据。我有一个包含350k对象的列表,当我使用Hibernate时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,但这并没有帮助。

我的对象与另一个对象具有一对一的关系,因此在这种情况下使用StatelessSession可能会出现问题。因为我认为StatelessSession不会级联到组成的对象。

您对saveOrUpdate()在这种情况下如何提高操作性能有任何想法吗?

谢谢。


阅读 258

收藏
2020-06-20

共1个答案

一尘不染

对于每个saveOrUpdate操作,Hibernate
select也会生成一条语句。我认为使用Hibernate的saveOrUpdate更新或插入大量数据根本不是一个好选择。我建议使用存储过程或移至SpringJDBCTemplate。

2020-06-20