hibernate 批量删除

xtay_myet 2011-11-04
就是我从jsp页面获取到checkbox的值,进行多选,给hibernate时,进行第二次循环时,
Person person = (Person)this.getHibernateTemplate().get(Person.class,id[i]);
person是null,第一次是有值的,就是第二次是空,是怎么回事啊!各位看看啊!谢谢!

public void deletePersons(String[] id) {
for(int i = 0;i < id.length;i++){
  Person person = (Person)this.getHibernateTemplate().get(Person.class,id[i]);
  String ttid = person.getAttid();
  Photo ph = new Photo();
  ph.setId(ttid);
  this.getHibernateTemplate().delete(ph);
  this.getHibernateTemplate().delete(person);
}
}
shenlan_digo 2011-11-04
Photo ph = new Photo();
  ph.setId(ttid);
  this.getHibernateTemplate().delete(ph);

ph是游离态,不是持久化对象,改为:
public void deletePersons(String[] id) {
for(int i = 0;i < id.length;i++){
  Person person = (Person)this.getHibernateTemplate().get(Person.class,id[i]);
  String ttid = person.getAttid();
  Photo ph = (Photo)this.getHibernateTemplate().get(Photo.class,ttid);
  this.getHibernateTemplate().delete(ph);
  this.getHibernateTemplate().delete(person);
}
}

至于你说的第二次person为null,跟踪看你的id数组中的值得到没有,数据库有没对应的数据。
laoma036912 2012-03-02
你这样效率太低了,每删除一个,要生成一个hql语句。
使用下面的方法,只生成一条hql语句:
/**
* 按照hql语句批量更新
* delete from Page p where p.id in (?);
*/
public void batchHandleByHQL(String hql, Object... objects) {
Query q=getSession().createQuery(hql);

for(int i=0;i<objects.length;i++) {
q.setParameter(i, objects[i]);
}
q.executeUpdate();
}
kuchafangfei 2012-08-08
laoma036912 写道
你这样效率太低了,每删除一个,要生成一个hql语句。
使用下面的方法,只生成一条hql语句:
/**
* 按照hql语句批量更新
* delete from Page p where p.id in (?);
*/
public void batchHandleByHQL(String hql, Object... objects) {
Query q=getSession().createQuery(hql);

for(int i=0;i<objects.length;i++) {
q.setParameter(i, objects[i]);
}
q.executeUpdate();
}

支持楼上的思路,那样效率高很多
杀客o凹胖 2013-01-25
kuchafangfei 写道
laoma036912 写道
你这样效率太低了,每删除一个,要生成一个hql语句。
使用下面的方法,只生成一条hql语句:
/**
* 按照hql语句批量更新
* delete from Page p where p.id in (?);
*/
public void batchHandleByHQL(String hql, Object... objects) {
Query q=getSession().createQuery(hql);

for(int i=0;i<objects.length;i++) {
q.setParameter(i, objects[i]);
}
q.executeUpdate();
}

支持楼上的思路,那样效率高很多

是啊,hql多直观啊
Global site tag (gtag.js) - Google Analytics