批量删除

使用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,利用事务批量提交。