我们在用Hibernate session的delete 方法时候是不是感觉到,有时候想进行批量删除,而delete里面的参数是一个object,我们要进行批量时,首先我们可以对当前类进行一个实例,然后再把要删除的id设置给当前对象,这样hibernate就能根据这个id删除数据库中的数据了,但是这样写感觉写起来很不爽,另外在进行删除时,hibernate要将要删除的对象加载到缓存中去,最后在进行session清空,这样才把对象从数据库中删除,当数据少时没有啥子差别,但删除数据量很大时,那么其性能就不用说,所以我们在把批量删除时选择绕过hibernate session,而直接调用jdbc对数据库进行操作,大大提高效率。
Session session = HibernateUtil.currentSession();
session.beginTransaction();
// session.connection();
session.doWork(new Work() {
public void execute(Connection connection) throws SQLException {
PreparedStatement ps = null;
try {
ps = connection.prepareStatement(sql);
ps.executeUpdate();
} catch (SQLException e) {
throw new SQLException("批量更新发生异常");
} finally {
if (ps != null) {
try {
ps.close();
} catch (Exception e) {
}
}
}
}
});
session.getTransaction().commit();
上面作法仍然要用hibernate事务作界限。其中// session.connection();
该方法已经过期,在hibernate3.0版本中,改用上述方法进行调用,是用Java中内部类来实现的。
如果所选的数据库支持存储过程,那么用存储过程来进行调用可能得到效果更好,尤其是在性能上。