使用SSH,有没有直接使用hibernate进行批量删除的方法(要求是这么写的),不用循环的那种,在页面使用jquery来获取数据,希望有例子出现!!
2种方案,
1、Hibernate中是可以直接在配置文件中设定多少条数据后进行操作。
2、手动flush和clear。
HQL支持使用DELETE语句来进行批量删除。不过使用这种方法,会造成该对象的二级缓存清空。所以使用要考虑到系统是否使用了二级缓存。
二级缓存清空有可能造成查询性能降低。
HibernateTempate对象
template.delteAll(List);
Session对象
session.createQuery("delete form table where id =:id").setParameterList("id", list);
在hibernate里直接使用HQL语句进行批量删除啊
[code="java"]
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
String hqlDelete = "delete Customer where name = :oldName";
int deletedEntities = s.createQuery( hqlDelete ) .setString( "oldName", oldName ) .executeUpdate();
tx.commit();
session.close();[/code]
或者
[code="java"]
String sql = "delete PlanPackageRelations where ppfId = "+ppfId;
int a = this.getHibernateTemplate().getSessionFactory().openSession().createQuery(sql).executeUpdate();
[/code]
解决方案:
思路:hibernate调用jdbc
种类两种:1.jdbc批量删除(一个条语句只删除一个条数据)
2.jdbc删除(一个条语句删除所有要删除的数据)
[code="java"]
Session s = HibernateUtil.getSessionFactory().getCurrentSession();
s.beginTransaction();// 开始事务
s.doReturningWork(new ReturningWork() {
@Override
public Object execute(Connection c) throws SQLException {
Statement s = c.createStatement();
// s.addBatch("delete from table_name where id=1");
// s.addBatch("delete from table_name where id=1");
// s.addBatch("delete from table_name where id=1");
// s.executeBatch();
s.execute("delete from table_name where id in(1,2,3)");
return null;
}
});
s.getTransaction().commit();// 提交事务
[/code]
Hibernate模版有bulkUpdate方法可以用哦。通过这个方法执行DELETE HQL语句就可以了。
[size=medium][color=red]可以参考一下这个,这个只是循环组合hql语句而已,并不是循环删除:[/color]
[color=brown]StringBuffer hql =new StringBuffer("delete from BO as cd where cd.id='");
for (int i = 0; i < params.length; i++) {
if (i == params.length - 1) {
hql.append(params[i] + "'");
} else if (i < params.length - 1) {
hql.append(params[i] + "' or cd.bill='");
}
}
getHibernateTemplate().bulkUpdate(hql);[/color][/size]
1,直接执行删除的hql语句或者sql语句;
2,利用事务批量提交。