SSH中批量插入的配置问题。疑惑?

大未 2012-06-14 10:45:38
框架SSH,我是这样处理海量数据插入的,在DAO下:

Session session = this.getHibernateTemplate().getSessionFactory().openSession();
Transaction tx = session.beginTransaction();
for (int i = 0; i < list.size(); i++) {
saveOrUpdate(list.get(i));
if (i % 1000 == 0) {
session.flush();
session.clear();
}
}
tx.commit();


我自己创建的session,去管理他。最后commit执行。
然后我的配置文件也跟着改成这样

<prop key="hibernate.connection.autocommit">false</prop>


现在程序能够正常跑,但是问题已经修改成手动commit了,那么Spring不会自动commit,DAO所有的CRUD操作都要自己commit了。例如我其它的DAO方法不涉及到海量数据操作。怎么处理这种情况呢?
...全文
139 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
hackersun12345 2012-06-18
  • 打赏
  • 举报
回复
<prop key="hibernate.connection.autocommit">false</prop>
如果是JDBCTransactionFactory,上面的是不需要配置的,默认是True,而在执行session.beginTransaction();时,会将autocommit设为false(可查看源码),其实也就达到了你的效果。

希望对你有所帮助
大未 2012-06-18
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

封装两个方法,一个是支持单个操作,一个是支持批量的。使用时调用就行了。
[/Quote]

帅哥,你是说在DAO下封装两个方法。但是DAO下的方法都是通过getHibernateTemplate()去执行CRUD的啊。
<prop key="hibernate.connection.autocommit">false</prop>不是已经配置了不自动提交么。那单个操作也要手动COMMIT啊?
lht0211 2012-06-16
  • 打赏
  • 举报
回复
封装两个方法,一个是支持单个操作,一个是支持批量的。使用时调用就行了。

67,513

社区成员

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

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