用于删除多个对象的Hibernate优化

时间:2011-10-04 10:04:00

标签: hibernate

在使用hibernate的Java EE应用程序中, 在一张大桌子上,我想清除数百万件物品。

例如

  1. 我得到了一些我要清除的对象:选项卡中的5000个对象返回的2000个对象
  2. 然后我想删除它们
  3. 实际上,当对象存在时,我会这样做:

            List<Object> objectList = this.getObjectManager()
                    .getObjectsByCriteria(clientName, objectType, MAX_OBJECTS);
            for (final Object object : objectList) {
                if (logger.isDebugEnabled()) {
                    logger.debug("will delete " + object);
                }
                this.getMManager().removeEntry(object);
                counter++;
            }
    
    
    public void removeObject(final Object object) {
        final Session session = this.getHibernateUtil().getSession();
        session.delete(entry);
        session.flush();
    }
    

    我想hibernate会在事务提交时删除所有对象,而不是逐个删除。

    1. 例如,为了删除2000个对象而没有内存或休眠异常,最佳解决方案是什么?

    2. 如何使用hibernate逐个删除?

1 个答案:

答案 0 :(得分:3)

不要获取它们,只需使用一些标准进行删除。在这种情况下使用HQL

session.createQuery("delete from MyClass where ...").setXXX(...).executeUpdate();