diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/DeletionDAO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/DeletionDAO.java index 9fde8bca53f38472a2ead8a2de7760f58801d8e9..347cb2ee48dff9d485ab44b01ce8d8fae082cab1 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/DeletionDAO.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/DeletionDAO.java @@ -17,6 +17,7 @@ package ch.systemsx.cisd.openbis.generic.server.dataaccess.db; import java.sql.SQLException; +import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -448,10 +449,23 @@ final class DeletionDAO extends AbstractGenericEntityDAO<DeletionPE> implements { return Collections.emptyList(); } - DetachedCriteria criteria = DetachedCriteria.forClass(entityKind.getDeletedEntityClass()); + HibernateTemplate hibernateTemplate = getHibernateTemplate(); List<Long> ids = TechId.asLongs(entityIds); - criteria.add(Restrictions.in(ID, ids)); - return cast(getHibernateTemplate().findByCriteria(criteria)); + int chunkSize = 30000; + List<IDeletablePE> result = new ArrayList<IDeletablePE>(); + for (int i = 0, n = ids.size(); i < n; i += chunkSize) + { + DetachedCriteria criteria = + DetachedCriteria.forClass(entityKind.getDeletedEntityClass()); + List<Long> subList = ids.subList(i, Math.min(n, i + chunkSize)); + if (subList.isEmpty() == false) + { + criteria.add(Restrictions.in(ID, subList)); + List<IDeletablePE> list = cast(hibernateTemplate.findByCriteria(criteria)); + result.addAll(list); + } + } + return result; } public List<TechId> listDeletedEntitiesForType(EntityKind entityKind, TechId entityTypeId)