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 49cbd0204c75d6e7eb1b0efbde2d9b9db3048261..6964f08b259165f2a90ff2671bde62f919db0f65 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 7b7bf1ddc68a03a6595a254da370090a6f1f6c25..5e387b27d454e069049a096fd8cac72308366e60 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()) {