From d5dfe5d76a664d080367f0e79ac19de5b0c80178 Mon Sep 17 00:00:00 2001 From: felmer <felmer> Date: Mon, 19 Mar 2012 13:23:51 +0000 Subject: [PATCH] LMS-2854 problem was that more than 32767 deleted samples are in the system. In the SQL statement the 'in (..)' part has therefore more parameters than allowed. Problem is solved by get not more than 30k in one go. SVN: 24749 --- .../server/dataaccess/db/DeletionDAO.java | 20 ++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) 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 9fde8bca53f..347cb2ee48d 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) -- GitLab