session.delete("from myEntity as entity where entity.id in(1,2,3,4,5,6)");

解决方案 »

  1.   

    session.delete("from Cat as c");
      

  2.   

    Hibernate没有批量删除,用条件的SQL,Hibernate也是先取出数据,再删除。
    如果你直接给出主键就少一次查询了。
      

  3.   


    楼上的说得对;在hibernate中是没有批量删除的;它都是用HSQL先把数据取出来;然后利用:session.delete("from Cat as c");
     
    来删除的;我建议你还是看看hibernate的帮助文档,我都看了几篇,没次看感觉都不一样,很有收获的哟;
      

  4.   

    Hibernate3可能会支持批量删除暂时可以用jdbc来做如果是需要在删除父对象时批量删除子对象,
    可以这样<key ... on-delete="cascade"/>,
    使用数据库外键约束来删除
      

  5.   

    直接用session.delete();就可以了。^_^
      

  6.   

    如果hibernate中没有批量删除或者批量更新,这个属于硬伤吧。
    虽然OO很好,但也有很多缺陷。我认为它的缓存机制有时反而降低效率。
      

  7.   

    >如果hibernate中没有批量删除或者批量更新,这个属于硬伤吧。<
    http://blog.hibernate.org/cgi-bin/blosxom.cgi>虽然OO很好,但也有很多缺陷<
    举几个例子好了>我认为它的缓存机制有时反而降低效率<
    同样也举个例子好了
      

  8.   

    楼上的,我没有否认Hibernate是一个不错的ORM产品,但任何ORM产品都逃不过这些问题,
    正因为 Hibernate 是基于OO的,所以任何数据库的修改与删除,
    实际上都是基于对象的操作,所以它都要先从数据库中选出来存入对象。
    理论上讲这样降低了执行效率是勿庸置疑的。
    一般情况下这个动作很快,感觉不到而已。
    但对于大数据量的操作,这样做是不是很好?值得讨论。
    现在我有一个表Person和author, 一对一,author的ID取自person的ID
    现在我要删除所有person中name='Person2'的记录,
    hibernate是这样处理的:select person0_.id as id, person0_.name as name, person0_.email as email from person person0_ where (person0_.name=? )
    select author0_.id as id0_, author0_.alias as alias0_ from author author0_ where author0_.id=?
    select author0_.id as id0_, author0_.alias as alias0_ from author author0_ where author0_.id=?
    delete from person where id=?可以很清楚的看出它的过程,它先选出来,然后按主键ID来删除。
    如果直接使用JDBC则一句SQL delete from person where name='Person2'即可。
    你举的例子确实是批处理,不过那其实是jdbc中的batch操作的意思。
    并不是我说的这个批处理的意思。这也是楼主所提的问题所在。
      

  9.   

    像我们做web应用的,你一般总是要先把数据展示给用户,然后用户才能操作,
    你上面这个例子,一个Person总是要先查询出来,展示给用户,然后用户再提交
    删除命令,所以只要把二级缓存打开,这个Person对象也不会被查询两次的。现在hibernate的问题是需要删除一大批纪录的情况,它暂时还没法高效地处理,
    那就直接用jdbc好了,这应该很简单吧,hibernate3应该会实现高效批删除。