当前位置: 首页 > 面试题库 >

休眠保存或更新大数据

燕俊明
2023-03-14
问题内容

我正在尝试使用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()在这种情况下如何提高操作性能有任何想法吗?

谢谢。


问题答案:

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



 类似资料:
  • 问题内容: 这分别是我的hbm和测试代码。我正在使用Spring的HibernateTemplate。我不使用DAO。使用Spring 2.0.7的Hibernate 2.2.5 血红蛋白 测试 超级测试班 错误 问题答案: 好的,根本原因是我对集合的映射无效。感谢这篇关于复合映射的文章 错误: 正确 完整的映射

  • 问题内容: 我试着通过网络搜索,但是徒劳。有没有一种方法可以使用hibernate来执行幂等更新。 一种用例是使用HTTP PUT通过REST API更新数据库中的特定字段。因此,例如,如果我有一个包含列: _ Id,Name,Phone,UpdateDate*_ 的数据库 _ ,_ 并且我多次用相同的值更新(特定 ID的 ) Phone ( 电话) 字段,那么只有我的第一个操作必须更新 Phon

  • 问题内容: 我已经读到,使用hibernate的二级缓存,它可以通过减少对数据/对象检索的数据库命中次数来提高应用程序性能。 但是,hibernate如何确保二级缓存与数据库中的数据保持最新。 例如: 假设下面的类是实体并且持久化到数据库中。 现在,如果我们启用了二级缓存,我知道如果打开不同的会话,则每个会话都将命中二级缓存以获取对象值。 现在,如果数据库中的数据发生更改(例如,对于ID = 1的

  • 问题内容: 我有一个胖客户端,带有25个表和约15个JInternalFrames(表的数据输入表单)的架构的java swing应用程序。我需要为DBMS交互选择直接的JDBC或ORM(在这种情况下为Spring框架hibernate)的设计选择。应用程序的构建将在将来发生。 对于这样规模的项目,hibernate会过大吗?对于是或否答案的解释将不胜感激(如果需要,甚至可以采用其他方法)。 TI

  • 问题内容: 我有以下问题,当试图在数据库中插入对象时,Hibernate卡住,没有返回错误,对象没有正确保存。 调试它,我发现它挂在 我正在使用PostgreSQL作为数据库。 我的配置文件: SELECT部分​​起作用。 我不确定我缺少什么。同样使用本地SQL插入命令,它也可以工作。 问题答案: 我没看到你这么忙 但最可取的是

  • 问题内容: 我在Java J2EE Web应用程序中使用Hibernate 3.5.2和Spring Core 3.0.1。当单独的用户同时更新同一记录时,我得到了StaleObjectStateExcpetion。事务由javax.persistence.EntityManager管理。这是我创建问题的步骤。 User1登录到应用程序 User2登录到应用程序 用户1开始编辑记录A 用户2开始编