【发布时间】:2013-06-09 14:45:56
【问题描述】:
我正在尝试使用 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() 操作的性能有什么想法吗?
谢谢。
【问题讨论】:
-
您使用的是哪个数据库平台,是否为您的条目自动生成标识符?
-
我使用的是 Oracle,也没有自动生成标识符。
标签: java performance hibernate bulkinsert