刚看了hibernate的reference,有些思路了
先把所有的对象都add进一个List,再直接delete这个List对象,这是最佳的方法吗?
先把所有的对象都add进一个List,再直接delete这个List对象,这是最佳的方法吗?
解决方案 »
- 如何在一个页面不跳转的情况下请求多个SpringMVC的Controller,就像S标签的action实现的那样
- 谁能帮帮我,getHibernateTemplate()空指针异常
- weblogic8.1.6发布xfirewebservices接口提示Error creating bean with name 'xfire.typeMapp
- 求助struts2配置问题。。
- MySQL数据库中文乱码问题?在线等!不是我平白无故给大家添乱,实在是搜了好多贴还是解决不了呀
- JavaBean使用时出现了想不通的错误?有点着急了。
- mysql写入乱码问题,help~
- 有谁用java开发过网管软件吗?
- hibernate并发问题。
- 我怎么结帐呀 谢谢 帮我
- 单击按纽时,如何打开页面(非弹出式)???
- 如何使用spring?起步咨询
用JDBC 会更好,但是请先搞清楚这是否是一个瓶颈,并且不要想当然认为JDBC 一定
会更快。如果确实需要直接使用JDBC,那么最好打开一个Hibernate Session 然后
从Session 获得connection,按照这种办法你仍然可以使用同样的transaction 策略
和底层的connection provider。
我现在只想知道Hibernate下该如何批量操作
创建一组对象->调用对象方法->生成多个sql语句->执行sql语句批量操作:
生成sql语句->执行如果需要从一个表复制到另一个表, 效率还会更低.
但我现在想问的,只是想知道“如何用hibernate完成此操作”
虽然我肯定大家说的对,但也想自己亲自调一下试试
目前的能想到的hibernate实现是这样:
将数据批量load上来,再批量砍掉……
public void remove(String[] id){
for(){
//将记录load()进session
} for(){
//将load进来的数据delete()掉……
}
}
一个删除要2个批处理动作....?
不是不实际……
确实我也看到了,用JDBC的好…………
但我这不只是想知道hibernate的实现方法吗......
只是一个普通的更新操作,不是批处理操作啊
JDBC做批处理
应该这样吧
session.connection().PreparedStatement(SQL).addBatch(String sql)
executeBatch()
而hibernate里,我看到sf.hibernate.engine下有一个Batcher接口
提供了
public void addToBatch(int expectedRowCount)
throws SQLException,HibernateException
和public void executeBatch()throws HibernateException但hibernate中的update/insert/delete操作都是针对session的,例如一个删除操作如下:
User user = (User)session.load(User.class,id);
session.delete(user);所以我现在只能把一个批量删除操作分为2步来做,很难受,不知道hibernate有没有其他的方法来实现??
long l1 = System.currentTimeMillis();
String abc = request.getParameter("number");
int all = Integer.parseInt(abc);
Product pro = new Product();
for(int i=0;i<all;i++){
pro.setProductName("testjdbc");
new ProductManager().addProduct(pro);//这里换成hibernate的插入再测
}
out.println("添加记录的条数为"+all+"<br>"+"所用时间为:");
out.println(System.currentTimeMillis()-l1);两次的结果相差很多,平均是1:5,当然JDBC的插入没有用批处理executeBatch(),最近没时间,等有时间再把优化后JDBC的结果测出来,总之你就先save(),delete()吧,其他的都交给Hibernate了,设置一下hibernate.cfg.xml的jdbc.fetch_size和jdbc.batch_size参数就可以了
或in(list/colection)