hibernate中 for (Object o: list<Object>) { getHibernateTemplate().delete(o); } 这个是每次删除都会去

hibernate中for(Objecto:list<Object>){getHibernateTemplate().delete(o);}每次循环删除的都会去链接数据库... hibernate中 for (Object o: list<Object>) { getHibernateTemplate().delete(o); } 每次循环删除的都会去链接数据库吗?还是只链接一次数据库 展开
 我来答
eric_luan
2011-05-17 · TA获得超过428个赞
知道小有建树答主
回答量:62
采纳率:0%
帮助的人:87.4万
展开全部
每次循环都要执行一次delete的.这显然是每次都要连接一次.

楼上的说看delete语句是没用的.就算是用的批处理的方式,在SQL语句中也是看不出来的.最终得到的SQL语句还是N条.区别在于批处理是一次打开连接后处理所有内容,只占用一条连接.

楼主问这个问题应该是想知道,例如一次删除10万条数据,就要用掉10万条connection,这样不管是用连接池还是JDBC连接,都是很大的消耗,这种情况下应该用批处理.Hibernate本身也支持批处理.

具体的API楼主应该自行查阅相关文档.例如我给你摘录其中一个版本的批量update

13.2. 批量更新(Batch updates)
此方法同样适用于检索和更新数据。此外,在进行会返回很多行数据的查询时, 你需要使用 scroll() 方法以便充分利用服务器端游标所带来的好处。

Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();

ScrollableResults customers = session.getNamedQuery("GetCustomers")
.setCacheMode(CacheMode.IGNORE)
.scroll(ScrollMode.FORWARD_ONLY);
int count=0;
while ( customers.next() ) {
Customer customer = (Customer) customers.get(0);
customer.updateStuff(...);
if ( ++count % 20 == 0 ) {
//flush a batch of updates and release memory:
session.flush();
session.clear();
}
}

tx.commit();
session.close();
ahyyxx222
2011-05-17 · TA获得超过2532个赞
知道小有建树答主
回答量:1405
采纳率:33%
帮助的人:1205万
展开全部
只连接一次数据库,但会提交多条删除语句,每次循环一条,在事务结束以后一次连接一次提交
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友a567e66
2011-05-17 · 超过30用户采纳过TA的回答
知道答主
回答量:112
采纳率:0%
帮助的人:90.4万
展开全部
这只连接一次数据库, 因为你的session没有关闭,错作多少次数据库就不好说了,可能是一次,这就要看你的list中的集合是怎么得来的了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
liu_shui8
2011-05-17 · TA获得超过102个赞
知道小有建树答主
回答量:140
采纳率:0%
帮助的人:128万
展开全部
数据库连接应该是hibernate连接池获取的,一次获取多少,然后释放。
估计你是想问会操作多少次数据库吧,
应该是每次循环都会操作数据库,你可以把show_sql打开,看控制台的delete语句就知道了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式