Hibernate批量删除的两种方式

第一种:使用Hibernate映射类对对象进行封装操作

---------------------------------------------------------------------------

@Override
    public boolean deleteTrainee(long[] id) {
        try {
            Session session = HibernateSessionFactory.getSession();
            Transaction ts = session.beginTransaction();
            
            //采用hibernate映射类的方法进行删除
            for (long idList: id) {
                Trainee t = (Trainee)session.load(Trainee.class, idList);
                if (t != null)
                    session.delete(t);
            }
            ts.commit();
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        } finally {
            HibernateSessionFactory.closeSession();
        }
    }

---------------------------------------------------------------------------

第二种:采用hql语句,拼接字符串设置占位符的方式进行操作

---------------------------------------------------------------------------

@Override
    public boolean deleteSupportTracking(Long[] id) {
        try {
            Session session = HibernateSessionFactory.getSession();
            Transaction ts = session.beginTransaction();
            
            //设定占位符的个数
            String sql = "";
            for (int i = 0; i < id.length; i++) {
                if (i == 0) {
                    sql = sql + "?";
                } else {
                    sql = sql + "," + "?";
                }
            }
            Query Query = session.createQuery("DELETE FROM SupportTracking WHERE id in(" + sql + ")");
            //设置占位符中的参数
            Long[] ints = new Long[id.length];
            for(int i=0; i<id.length; i++){
                ints[i] = id[i];
                Query.setParameter(i, ints[i]);
            }
                int k = Query.executeUpdate();
            ts.commit();
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        } finally {
            HibernateSessionFactory.closeSession();
        }
    }

---------------------------------------------------------------------------

2.1网上抄来的写法,未测试(先放这,有空再试试)

---------------------------------------------------------------------------

public void deletes(List<Integer> idList) {
String hql = "";
for (int i = 0; i < idList.size(); i++) {
if(i==0) {
hql = "id="+idList.get(i);
} else {
hql =hql + " or id="+idList.get(i);
}
Session session= this.getSession();
Query q= session.createQuery("delete from Timeliftinfo where "+hql);
q.executeUpdate();
}

}

---------------------------------------------------------------------------

时间: 2024-11-05 12:34:15

Hibernate批量删除的两种方式的相关文章

hibernate 一对一映射的两种方式

一对一映射一共有两种映射方式: 使用用户和身份证信息的一对一的关系 User: package cn.itcast.one2one; public class User { private int userId;//用户id private String userName;//用户姓名 private IdCard idCard;//身份者 public int getUserId() { return userId; } public void setUserId(int userId) {

mybatis动态sql之使用foreach进行批量插入的两种方式

EmployeeMapperDynamicSql.java package com.gong.mybatis.mapper; import java.util.List; import java.util.Map; import org.apache.ibatis.annotations.MapKey; import org.apache.ibatis.annotations.Param; import com.gong.mybatis.bean.Employee; public interfa

JDBC 删除数据两种方式,PreparedStatement表示预编译的 SQL 语句的对象,防止sql注入

1.statement使用的不方便 2.sql注入的问题 *  在SQL语句中使用了系统自带的关键字 or and ,让where条件判断失效 *   prepareStatement: *  1.sql语句不用在拼字符串 *  2.防止sql注入问题 1 public class CURDTest { 2 public static void main(String[] args) throws Exception { 3 //insertTest(); 4 //deleteTest(); 5

批量删除的三种方式(EasyUi为例)

1.前台遍历单个单个id传值: "delete":function(){ var row=dg.datagrid("getChecked"); if(!row){ $.messager.alert("警告","请选中一行进行操作","warning"); return; } //cf:这是后台传回来得布尔值 $.messager.confirm("提示","是否将<spa

Hibernate(八)--session的两种获取方式

openSession getCurrentSession Hibernate有两种方式获得session,分别是: openSession和getCurrentSession他们的区别在于1. 获取的是否是同一个session对象 openSession每次都会得到一个新的Session对象 getCurrentSession在同一个线程中,每次都是获取相同的Session对象,但是在不同的线程中获取的是不同的Session对象 SessionFactory factory=new Confi

关于Mysql删除表数据的两种方式对比

1.delete from table_name 一行一行删除,只删除表数据,auto_increament仍停留在最后一天数据的下一个值. 2.truncate table_name 快捷删除表数据.先删除整个表,然后重新建表结构.auto_increament从1开始. 关于Mysql删除表数据的两种方式对比,布布扣,bubuko.com

转载:删除github上文件夹的两种方式

http://www.jianshu.com/p/286be61bb9b8 删除github上文件夹的两种方式(解决已经加入ignore的文件夹无法从远程仓库删除的问题) 如果此文件夹已被加入git追踪,那么删除方法很简单,只需要将此文件夹删掉,然后提交一下就可以了如果次文件夹曾经被加入过git追踪,现在被加入.gitignore里了,但是github上还有此文件夹.对于这种情况,稍微有点复杂,因为已经加入.gitignore的文件或文件夹,无法对其进行提交了,哪怕是将其删除,都无法提交.我们用

002-UIImageView和UIButton对比 UIImageView的帧动画 格式符补充 加载图片两种方式 添加删除SUBVIEW

一>.UIImageView和UIButton对比 显示图片 1> UIImageView只是一种图片(图片默认会填充整个UIImageView)  image\setImage: 2> UIButton能显示2种图片 * 背景 (背景会填充整个UIButton)  setBackgroundImage:forState: * 前置(覆盖在背景上面的图片,按照之前的尺寸显示)  setImage:forState: * 还能显示文字 点击事件 1> UIImageView默认是不能

Hibernate 带参数查询的两种方式

1.使用?通配符 public User validate(String userName, String password) { String hql = "from User u where u.userName = ? and u.password = ?"; User user = null; List<User> list = ht.find(hql, new Object[]{userName, password}); if (list.size()!=0){