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); } 每次循环删除的都会去链接数据库吗?还是只链接一次数据库
展开
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();
楼上的说看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();
展开全部
只连接一次数据库,但会提交多条删除语句,每次循环一条,在事务结束以后一次连接一次提交
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这只连接一次数据库, 因为你的session没有关闭,错作多少次数据库就不好说了,可能是一次,这就要看你的list中的集合是怎么得来的了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
数据库连接应该是hibernate连接池获取的,一次获取多少,然后释放。
估计你是想问会操作多少次数据库吧,
应该是每次循环都会操作数据库,你可以把show_sql打开,看控制台的delete语句就知道了。
估计你是想问会操作多少次数据库吧,
应该是每次循环都会操作数据库,你可以把show_sql打开,看控制台的delete语句就知道了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询