From 2ea19fdd58b0d8751815d2639e115a3f5d25dbaa Mon Sep 17 00:00:00 2001 From: juanf <juanf> Date: Wed, 8 Mar 2017 15:05:54 +0000 Subject: [PATCH] SSDM-4682 : bugix, openBIS empty trashcan breaks when num entities over 2-byte due to SQL IN SVN: 37868 --- .../server/dataaccess/db/InQueryScroller.java | 6 ++-- .../server/dataaccess/db/MetaprojectDAO.java | 29 ++++++++++++------- 2 files changed, 23 insertions(+), 12 deletions(-) diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/InQueryScroller.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/InQueryScroller.java index 49cbd0204c7..6964f08b259 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/InQueryScroller.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/InQueryScroller.java @@ -1,5 +1,7 @@ package ch.systemsx.cisd.openbis.generic.server.dataaccess.db; +import java.util.ArrayList; +import java.util.Collection; import java.util.List; public class InQueryScroller<I> @@ -12,9 +14,9 @@ public class InQueryScroller<I> private int fixParamsSize; - public InQueryScroller(List<I> inArguments, int fixParamsSize) + public InQueryScroller(Collection<I> inArguments, int fixParamsSize) { - this.inArguments = inArguments; + this.inArguments = new ArrayList<>(inArguments); this.fromIndex = 0; this.fixParamsSize = fixParamsSize; } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/MetaprojectDAO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/MetaprojectDAO.java index 7b7bf1ddc68..5e387b27d45 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/MetaprojectDAO.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/MetaprojectDAO.java @@ -186,18 +186,27 @@ public class MetaprojectDAO extends AbstractGenericEntityDAO<MetaprojectPE> impl { return Collections.emptySet(); } - final DetachedCriteria criteria = DetachedCriteria.forClass(MetaprojectAssignmentPE.class); - criteria.createAlias("metaproject", "m"); - criteria.add(Restrictions.eq("m.owner", owner)); - criteria.add(Restrictions.in(entityKind.getLabel(), entities)); - criteria.setFetchMode("experiment", FetchMode.SELECT); - criteria.setFetchMode("sample", FetchMode.SELECT); - criteria.setFetchMode("dataSet", FetchMode.SELECT); - criteria.setFetchMode("material", FetchMode.SELECT); + final List<MetaprojectAssignmentPE> assignments = new ArrayList<>(); - final List<MetaprojectAssignmentPE> assignments = - cast(getHibernateTemplate().findByCriteria(criteria)); + InQueryScroller<? extends IEntityInformationWithPropertiesHolder> entitiesScroller = new InQueryScroller<>(entities, 1); + List<? extends IEntityInformationWithPropertiesHolder> partialEntities = null; + + while ((partialEntities = entitiesScroller.next()) != null) + { + final DetachedCriteria criteria = DetachedCriteria.forClass(MetaprojectAssignmentPE.class); + criteria.createAlias("metaproject", "m"); + criteria.add(Restrictions.eq("m.owner", owner)); + criteria.add(Restrictions.in(entityKind.getLabel(), partialEntities)); + + criteria.setFetchMode("experiment", FetchMode.SELECT); + criteria.setFetchMode("sample", FetchMode.SELECT); + criteria.setFetchMode("dataSet", FetchMode.SELECT); + criteria.setFetchMode("material", FetchMode.SELECT); + + final List<MetaprojectAssignmentPE> partialAssignments = cast(getHibernateTemplate().findByCriteria(criteria)); + assignments.addAll(partialAssignments); + } if (operationLog.isDebugEnabled()) { -- GitLab