diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/DataDAO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/DataDAO.java index 43caf1f12bd68ad8dc93e49f398de36c683b32ec..e3aa0e2d0b03829fc2dd1823e85ff948d1457fb9 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/DataDAO.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/DataDAO.java @@ -146,10 +146,10 @@ final class DataDAO extends AbstractGenericEntityWithPropertiesDAO<DataPE> imple @Override public Object doInHibernate(Session session) throws HibernateException { - InQuery inQuery = new InQuery<Long, Number>(); List<Number> list = - inQuery.withBatch(session, "select distinct samp_id from data where samp_id in (:sampleIds)", "sampleIds", sampleIds); + inQuery.withBatch(session, "select distinct samp_id from data where samp_id in (:sampleIds)", "sampleIds", sampleIds, + null); Set<Long> ids = new HashSet<Long>(); for (Number item : list) { @@ -1343,23 +1343,6 @@ final class DataDAO extends AbstractGenericEntityWithPropertiesDAO<DataPE> imple scheduleDynamicPropertiesEvaluation(Arrays.asList(entity)); } - @Override - protected void scheduleDynamicPropertiesEvaluation(List<DataPE> dataSets) - { - List<DataPE> toUpdate = new ArrayList<DataPE>(); - addAllDataSetsAndComponentsRecursively(toUpdate, dataSets); - super.scheduleDynamicPropertiesEvaluation(toUpdate); - } - - private void addAllDataSetsAndComponentsRecursively(List<DataPE> resultDataSets, List<DataPE> dataSets) - { - for (DataPE dataSet : dataSets) - { - resultDataSets.add(dataSet); - addAllDataSetsAndComponentsRecursively(resultDataSets, dataSet.getContainedDataSets()); - } - } - @Override public List<TechId> listDataSetIdsBySampleIds(final Collection<TechId> samples) { diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/InQuery.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/InQuery.java index 0c587b01bbe0b425a42273fb1faf33408a5f5a54..7c747ced38b9d51d587b8ed84b61dbfb1347fd7f 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/InQuery.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/InQuery.java @@ -2,6 +2,7 @@ package ch.systemsx.cisd.openbis.generic.server.dataaccess.db; import java.util.ArrayList; import java.util.List; +import java.util.Map; import org.hibernate.SQLQuery; import org.hibernate.Session; @@ -10,7 +11,7 @@ public class InQuery<I, O> { private static final int POSTGRES_DRIVER_MAX_ARGS = 32767; // Uses a signed 2 bytes integer - public List<O> withBatch(Session session, String inQuery, String inParameter, List<I> inArguments) + public List<O> withBatch(Session session, String inQuery, String inParameter, List<I> inArguments, Map<String, Object> fixParams) { List<O> result = new ArrayList<O>(inArguments.size()); @@ -27,6 +28,13 @@ public class InQuery<I, O> SQLQuery query = session.createSQLQuery(inQuery); query.setParameterList(inParameter, partialInArguments); + if (fixParams != null) + { + for (String paramName : fixParams.keySet()) + { + query.setParameter(paramName, fixParams.get(paramName)); + } + } List<O> partialResult = query.list(); result.addAll(partialResult); fromIndex = toIndex; diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/SampleDAO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/SampleDAO.java index c70452d06134e5255252d6c0ca7c2428ccbb8731..f45c5b6aa99225f46782a673dbe87b05dbf07f10 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/SampleDAO.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/SampleDAO.java @@ -72,7 +72,8 @@ public class SampleDAO extends AbstractGenericEntityWithPropertiesDAO<SamplePE> /** * This logger does not output any SQL statement. If you want to do so, you had better set an appropriate debugging level for class - * {@link JdbcAccessor}. </p> + * {@link JdbcAccessor}. + * </p> */ private static final Logger operationLog = LogFactory.getLogger(LogCategory.OPERATION, SampleDAO.class); @@ -648,12 +649,16 @@ public class SampleDAO extends AbstractGenericEntityWithPropertiesDAO<SamplePE> @Override public final Object doInHibernate(final Session session) { - SQLQuery query = - session.createSQLQuery("select sample_id_child, sample_id_parent from " + TableNames.SAMPLE_RELATIONSHIPS_VIEW - + " where relationship_id = :relationship and sample_id_child in (:children)"); - query.setParameterList("children", children); - query.setParameter("relationship", relationship); - return query.list(); + InQuery inQuery = new InQuery<Long, Number>(); + Map<String, Object> fixParams = new HashMap<String, Object>(); + fixParams.put("relationship", relationship); + + List<Object> list = + inQuery.withBatch(session, "select sample_id_child, sample_id_parent from " + TableNames.SAMPLE_RELATIONSHIPS_VIEW + + " where relationship_id = :relationship and sample_id_child in (:children)", "children", + new ArrayList(children), + fixParams); + return list; } }); @@ -729,7 +734,7 @@ public class SampleDAO extends AbstractGenericEntityWithPropertiesDAO<SamplePE> final List<Long> longIds = TechId.asLongs(sampleTypeIds); return listSampleIdsByColumn("sampleType.id", longIds, "samples for given sample types"); } - + @Override public List<TechId> listSampleIdsByExperimentIds(final Collection<TechId> experiments) { @@ -741,20 +746,20 @@ public class SampleDAO extends AbstractGenericEntityWithPropertiesDAO<SamplePE> { final List<Long> results = DAOUtils.listByCollection(getHibernateTemplate(), new IDetachedCriteriaFactory() - { - @Override - public DetachedCriteria createCriteria() { - final DetachedCriteria criteria = - DetachedCriteria.forClass(SamplePE.class); - criteria.setProjection(Projections.id()); - return criteria; - } - }, columnName, longIds); + @Override + public DetachedCriteria createCriteria() + { + final DetachedCriteria criteria = + DetachedCriteria.forClass(SamplePE.class); + criteria.setProjection(Projections.id()); + return criteria; + } + }, columnName, longIds); operationLog.info(String.format("found %s " + message, results.size())); return transformNumbers2TechIdList(results); } - + @Override public void setSampleContainer(final Long sampleId, final Long containerId) {