关于Hibernate批量处理!

M_song 2009-03-20 08:43:49
需要用hibernate批量进行保存操作,代码如下,其中list里可能会有30W条数据左右,目前已经跑12个小时(weblogic 920),大家讨论下看有没有更好的方法,或者代码方面,配置方面需要更改的!
另外,暂时不考虑通过jdbc,或者存储过程来实现!
  public List<FeePayStream> newSaveFeePayStream(List<FeePayStream> list) throws FeePayManageDaoException {
Session session = this.getSession();
int i=0;
try {
for (FeePayStream feePayStream : list) {
session.save(feePayStream);
i++;
if(i%50==0)
{
session.flush();
session.clear();
}
}
}
catch (Exception e) {
throw new FeePayManageDaoException(e.getMessage());
}
finally {
session.flush();
session.clear();
}
return list;
}
...全文
1278 38 打赏 收藏 转发到动态 举报
写回复
用AI写文章
38 条回复
切换为时间正序
请发表友善的回复…
发表回复
cantalou 2010-06-01
  • 打赏
  • 举报
回复
明显刷分嫌疑
yangubuntu 2010-04-30
  • 打赏
  • 举报
回复
用jdbc是最快的,但是不考虑用,最好用多线程
wadsad 2009-04-13
  • 打赏
  • 举报
回复
这种情况只能用存储过程搞,无论用hibernate还是jdbc 都是错误的。
ET郭强 2009-04-12
  • 打赏
  • 举报
回复
up
cxx8408 2009-04-12
  • 打赏
  • 举报
回复
用jdbc是最快的,但是不考虑用,看看用多线程,或者分成多次来处理,处理1次,让线程sleep 一下
cxalxpks 2009-04-11
  • 打赏
  • 举报
回复
好贴 学习了
xidu_007 2009-04-11
  • 打赏
  • 举报
回复
大批量的数据还是用sql比较好吧,这本来就是Hibernate的弱点。
xidu_007 2009-04-11
  • 打赏
  • 举报
回复
大批量的数据还是用sql比较好吧,这本来就是Hibernate的弱点。
ben0759 2009-04-11
  • 打赏
  • 举报
回复
跟楼上的,不要用session,用statelesssession。
licip 2009-04-09
  • 打赏
  • 举报
回复
学习了
tanqimin 2009-04-09
  • 打赏
  • 举报
回复
不是我说啊,太注重性能,就别用Hibernate,哈
lin_eric 2009-03-27
  • 打赏
  • 举报
回复
mark
M_song 2009-03-23
  • 打赏
  • 举报
回复
事务是统一配置的!
dudenglan 2009-03-21
  • 打赏
  • 举报
回复
用的啥数据库啊?直接采用数据库里面存,也需要花大量的时间,何况,程序呢?电脑配置快,数据库快,就行了
老紫竹 2009-03-21
  • 打赏
  • 举报
回复
30W,如果数据量不是很大,应该1-2分钟就结束了。

你启动事务吧。我只看到了session,可是没看到事务。





Shine_Panda 2009-03-21
  • 打赏
  • 举报
回复
优化起来貌似 有点困难。 内存中咋能出现 30w数据呢。可以从数据获取端去优化。
hao1314 2009-03-21
  • 打赏
  • 举报
回复
学习中
dawn023 2009-03-20
  • 打赏
  • 举报
回复
String sql = "insert into table_name (db field list) values (?, ?, ...)";
BatchPreparedStatementSetter setter = BatchPreparedStatementSetter()
{
public int getBatchSize()
{
return size;
}

public void setValues(PreparedStatement ps, int index) throws SQLException
{
//从list中根据index取出对象
//ps.setXXX(int index, Object value);
}
};
getJdbcTemplate().batchUpdate(sql, setter);
dawn023 2009-03-20
  • 打赏
  • 举报
回复
建议采用BatchPreparedStatementSetter。
getJdbcTemplate().batchUpdate(String sql, BatchPreparedStatementSetter setter)。
可以批量处理。
fulianglove 2009-03-20
  • 打赏
  • 举报
回复
跟数据库有关吧,有的数据库插入时是锁表的,ORACLE好像不是,用subList配合多线程应该可以提高一些
加载更多回复(14)

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧