Example usage for org.hibernate.criterion DetachedCriteria setResultTransformer

List of usage examples for org.hibernate.criterion DetachedCriteria setResultTransformer

Introduction

In this page you can find the example usage for org.hibernate.criterion DetachedCriteria setResultTransformer.

Prototype

public DetachedCriteria setResultTransformer(ResultTransformer resultTransformer) 

Source Link

Document

Set the result transformer to use.

Usage

From source file:gov.nih.nci.cananolab.service.admin.impl.OwnershipTransferServiceImpl.java

License:BSD License

private Sample findFullyLoadedSampleById(String sampleId) throws Exception {
    CaNanoLabApplicationService appService = (CaNanoLabApplicationService) ApplicationServiceProvider
            .getApplicationService();/*from   w w w  .ja  v a2  s . c  o m*/
    // load composition and characterization separate because of Hibernate
    // join limitation
    DetachedCriteria crit = DetachedCriteria.forClass(Sample.class)
            .add(Property.forName("id").eq(new Long(sampleId)));
    Sample sample = null;

    // load composition and characterization separate because of
    // Hibernate join limitation
    crit.setFetchMode("primaryPointOfContact", FetchMode.JOIN);
    crit.setFetchMode("primaryPointOfContact.organization", FetchMode.JOIN);
    crit.setFetchMode("otherPointOfContactCollection", FetchMode.JOIN);
    crit.setFetchMode("otherPointOfContactCollection.organization", FetchMode.JOIN);
    crit.setFetchMode("keywordCollection", FetchMode.JOIN);
    crit.setFetchMode("publicationCollection", FetchMode.JOIN);
    crit.setFetchMode("publicationCollection.authorCollection", FetchMode.JOIN);
    crit.setFetchMode("publicationCollection.keywordCollection", FetchMode.JOIN);
    crit.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY);

    List result = appService.query(crit);
    if (!result.isEmpty()) {
        sample = (Sample) result.get(0);
    }
    if (sample == null) {
        throw new NotExistException("Sample doesn't exist in the database");
    }

    // fully load composition
    SampleComposition comp = this.loadComposition(sample.getId().toString());
    sample.setSampleComposition(comp);

    // fully load characterizations
    List<Characterization> chars = this.loadCharacterizations(sample.getId().toString());
    if (chars != null && !chars.isEmpty()) {
        sample.setCharacterizationCollection(new HashSet<Characterization>(chars));
    } else {
        sample.setCharacterizationCollection(null);
    }
    return sample;
}

From source file:gov.nih.nci.cananolab.service.admin.impl.OwnershipTransferServiceImpl.java

License:BSD License

private SampleComposition loadComposition(String sampleId) throws Exception {
    SampleComposition composition = null;

    CaNanoLabApplicationService appService = (CaNanoLabApplicationService) ApplicationServiceProvider
            .getApplicationService();// ww w  .  jav a2  s  . c  om
    DetachedCriteria crit = DetachedCriteria.forClass(SampleComposition.class);
    crit.createAlias("sample", "sample");
    crit.add(Property.forName("sample.id").eq(new Long(sampleId)));
    crit.setFetchMode("nanomaterialEntityCollection", FetchMode.JOIN);
    crit.setFetchMode("nanomaterialEntityCollection.fileCollection", FetchMode.JOIN);
    crit.setFetchMode("nanomaterialEntityCollection.fileCollection.keywordCollection", FetchMode.JOIN);
    crit.setFetchMode("nanomaterialEntityCollection.composingElementCollection", FetchMode.JOIN);
    crit.setFetchMode("nanomaterialEntityCollection.composingElementCollection.inherentFunctionCollection",
            FetchMode.JOIN);
    crit.setFetchMode(
            "nanomaterialEntityCollection.composingElementCollection.inherentFunctionCollection.targetCollection",
            FetchMode.JOIN);
    crit.setFetchMode("functionalizingEntityCollection", FetchMode.JOIN);
    crit.setFetchMode("functionalizingEntityCollection.fileCollection", FetchMode.JOIN);
    crit.setFetchMode("functionalizingEntityCollection.fileCollection.keywordCollection", FetchMode.JOIN);
    crit.setFetchMode("functionalizingEntityCollection.functionCollection", FetchMode.JOIN);
    crit.setFetchMode("functionalizingEntityCollection.functionCollection.targetCollection", FetchMode.JOIN);
    crit.setFetchMode("functionalizingEntityCollection.activationMethod", FetchMode.JOIN);
    crit.setFetchMode("chemicalAssociationCollection", FetchMode.JOIN);
    crit.setFetchMode("chemicalAssociationCollection.fileCollection", FetchMode.JOIN);
    crit.setFetchMode("chemicalAssociationCollection.fileCollection.keywordCollection", FetchMode.JOIN);
    crit.setFetchMode("chemicalAssociationCollection.associatedElementA", FetchMode.JOIN);
    crit.setFetchMode("chemicalAssociationCollection.associatedElementB", FetchMode.JOIN);
    crit.setFetchMode("fileCollection", FetchMode.JOIN);
    crit.setFetchMode("fileCollection.keywordCollection", FetchMode.JOIN);
    crit.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY);
    List result = appService.query(crit);

    if (!result.isEmpty()) {
        composition = (SampleComposition) result.get(0);
    }
    return composition;
}

From source file:gov.nih.nci.cananolab.service.admin.impl.OwnershipTransferServiceImpl.java

License:BSD License

private List<Characterization> loadCharacterizations(String sampleId) throws Exception {
    List<Characterization> chars = new ArrayList<Characterization>();

    CaNanoLabApplicationService appService = (CaNanoLabApplicationService) ApplicationServiceProvider
            .getApplicationService();/*w  ww .ja  v a2  s .c om*/
    DetachedCriteria crit = DetachedCriteria.forClass(Characterization.class);
    crit.createAlias("sample", "sample");
    crit.add(Property.forName("sample.id").eq(new Long(sampleId)));
    // fully load characterization
    crit.setFetchMode("pointOfContact", FetchMode.JOIN);
    crit.setFetchMode("pointOfContact.organization", FetchMode.JOIN);
    crit.setFetchMode("protocol", FetchMode.JOIN);
    crit.setFetchMode("protocol.file", FetchMode.JOIN);
    crit.setFetchMode("protocol.file.keywordCollection", FetchMode.JOIN);
    crit.setFetchMode("experimentConfigCollection", FetchMode.JOIN);
    crit.setFetchMode("experimentConfigCollection.technique", FetchMode.JOIN);
    crit.setFetchMode("experimentConfigCollection.instrumentCollection", FetchMode.JOIN);
    crit.setFetchMode("findingCollection", FetchMode.JOIN);
    crit.setFetchMode("findingCollection.datumCollection", FetchMode.JOIN);
    crit.setFetchMode("findingCollection.datumCollection.conditionCollection", FetchMode.JOIN);
    crit.setFetchMode("findingCollection.fileCollection", FetchMode.JOIN);
    crit.setFetchMode("findingCollection.fileCollection.keywordCollection", FetchMode.JOIN);
    crit.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY);
    List results = appService.query(crit);

    for (int i = 0; i < results.size(); i++) {
        Characterization achar = (Characterization) results.get(i);
        chars.add(achar);
    }
    return chars;
}

From source file:gov.nih.nci.cananolab.service.protocol.helper.ProtocolServiceHelper.java

License:BSD License

public List<Protocol> findProtocolsBy(String protocolType, String protocolName, String protocolAbbreviation,
        String fileTitle) throws Exception {
    List<Protocol> protocols = new ArrayList<Protocol>();
    CaNanoLabApplicationService appService = (CaNanoLabApplicationService) ApplicationServiceProvider
            .getApplicationService();/*  w w w  . j a  v a  2s  .  com*/
    DetachedCriteria crit = DetachedCriteria.forClass(Protocol.class);
    crit.createAlias("file", "file", CriteriaSpecification.LEFT_JOIN);

    crit.setFetchMode("file.keywordCollection", FetchMode.JOIN);
    if (!StringUtils.isEmpty(protocolType)) {
        // case insensitive
        crit.add(Restrictions.ilike("type", protocolType, MatchMode.EXACT));
    }
    if (!StringUtils.isEmpty(protocolName)) {
        TextMatchMode protocolNameMatchMode = new TextMatchMode(protocolName);
        crit.add(Restrictions.ilike("name", protocolNameMatchMode.getUpdatedText(),
                protocolNameMatchMode.getMatchMode()));
    }
    if (!StringUtils.isEmpty(protocolAbbreviation)) {
        TextMatchMode protocolAbbreviationMatchMode = new TextMatchMode(protocolAbbreviation);
        crit.add(Restrictions.ilike("abbreviation", protocolAbbreviationMatchMode.getUpdatedText(),
                protocolAbbreviationMatchMode.getMatchMode()));
    }
    if (!StringUtils.isEmpty(fileTitle)) {
        TextMatchMode titleMatchMode = new TextMatchMode(fileTitle);
        crit.add(Restrictions.ilike("file.title", titleMatchMode.getUpdatedText(),
                titleMatchMode.getMatchMode()));
    }
    crit.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY);
    List results = appService.query(crit);
    for (int i = 0; i < results.size(); i++) {
        Protocol protocol = (Protocol) results.get(i);
        if (springSecurityAclService.currentUserHasReadPermission(protocol.getId(),
                SecureClassesEnum.PROTOCOL.getClazz())
                || springSecurityAclService.currentUserHasWritePermission(protocol.getId(),
                        SecureClassesEnum.PROTOCOL.getClazz())) {
            protocols.add(protocol);
        } else {
            logger.debug("User doesn't have access ot protocol with id " + protocol.getId());
        }
    }
    return protocols;
}

From source file:gov.nih.nci.cananolab.service.protocol.helper.ProtocolServiceHelper.java

License:BSD License

public Protocol findProtocolBy(String protocolType, String protocolName, String protocolVersion)
        throws Exception {
    // protocol type and protocol name are required
    if (StringUtils.isEmpty(protocolType) && StringUtils.isEmpty(protocolName)) {
        return null;
    }/*from  www.ja v  a 2  s  .com*/
    Protocol protocol = null;
    CaNanoLabApplicationService appService = (CaNanoLabApplicationService) ApplicationServiceProvider
            .getApplicationService();
    DetachedCriteria crit = DetachedCriteria.forClass(Protocol.class)
            .add(Property.forName("type").eq(protocolType).ignoreCase())
            .add(Property.forName("name").eq(protocolName).ignoreCase());
    if (!StringUtils.isEmpty(protocolVersion)) {
        crit.add(Property.forName("version").eq(protocolVersion).ignoreCase());
    }
    crit.setFetchMode("file", FetchMode.JOIN);
    crit.setFetchMode("file.keywordCollection", FetchMode.JOIN);
    crit.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY);
    List results = appService.query(crit);
    if (results.isEmpty()) {
        return null;
    }
    if (results.size() > 1) {
        return null;
    }
    protocol = (Protocol) results.get(0);

    if (springSecurityAclService.currentUserHasReadPermission(protocol.getId(),
            SecureClassesEnum.PROTOCOL.getClazz())
            || springSecurityAclService.currentUserHasWritePermission(protocol.getId(),
                    SecureClassesEnum.PROTOCOL.getClazz())) {
        return protocol;
    } else {
        throw new NoAccessException();
    }
}

From source file:gov.nih.nci.cananolab.service.sample.helper.AdvancedSampleServiceHelper.java

License:BSD License

/**
 * Find sample details as an AdvancedSampleBean for the given sample name
 * and advanced search parameters/*  w  w  w .  j ava  2  s.  c om*/
 * 
 * @param sampleId
 * @param searchBean
 * @return
 * @throws Exception
 */
public AdvancedSampleBean findAdvancedSampleByAdvancedSearch(String sampleId,
        AdvancedSampleSearchBean searchBean) throws Exception {
    if (!springSecurityAclService.currentUserHasReadPermission(Long.valueOf(sampleId),
            SecureClassesEnum.SAMPLE.getClazz())
            && !springSecurityAclService.currentUserHasWritePermission(Long.valueOf(sampleId),
                    SecureClassesEnum.SAMPLE.getClazz())) {
        throw new NoAccessException();
    }
    // load sample first with point of contact info and function info and
    // datum info
    DetachedCriteria crit = DetachedCriteria.forClass(Sample.class)
            .add(Restrictions.eq("id", new Long(sampleId)));
    crit.setFetchMode("primaryPointOfContact", FetchMode.JOIN);
    crit.setFetchMode("primaryPointOfContact.organization", FetchMode.JOIN);
    crit.setFetchMode("otherPointOfContactCollection", FetchMode.JOIN);
    crit.setFetchMode("otherPointOfContactCollection.organization", FetchMode.JOIN);
    crit.setFetchMode("sampleComposition.nanomaterialEntityCollection", FetchMode.JOIN);
    crit.setFetchMode("sampleComposition.nanomaterialEntityCollection.composingElementCollection",
            FetchMode.JOIN);
    crit.setFetchMode(
            "sampleComposition.nanomaterialEntityCollection.composingElementCollection.inherentFunctionCollection",
            FetchMode.JOIN);

    crit.setFetchMode("sampleComposition.functionalizingEntityCollection", FetchMode.JOIN);
    crit.setFetchMode("sampleComposition.functionalizingEntityCollection.functionCollection", FetchMode.JOIN);
    crit.setFetchMode("characterizationCollection", FetchMode.JOIN);
    crit.setFetchMode("characterizationCollection.findingCollection", FetchMode.JOIN);
    crit.setFetchMode("characterizationCollection.findingCollection.datumCollection", FetchMode.JOIN);
    CaNanoLabApplicationService appService = (CaNanoLabApplicationService) ApplicationServiceProvider
            .getApplicationService();
    crit.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY);
    List result = appService.query(crit);
    Sample sample = null;
    if (!result.isEmpty()) {
        sample = (Sample) result.get(0);
    }

    List<PointOfContact> pocs = findPointOfContactsBy(sample, searchBean);
    List<Function> functions = findFunctionsBy(sampleId, searchBean);
    List<NanomaterialEntity> nanoEntities = findNanomaterialEntitiesBy(sampleId, searchBean);
    List<FunctionalizingEntity> funcEntities = findFunctionalizingEntitiesBy(sampleId, searchBean);
    List<Characterization> charas = findCharacterizationsBy(sampleId, searchBean);
    List<Datum> data = findDataBy(sample, searchBean);
    AdvancedSampleBean advancedSampleBean = new AdvancedSampleBean(sampleId, pocs, functions, nanoEntities,
            funcEntities, charas, data, searchBean, sample);
    return advancedSampleBean;
}

From source file:gov.nih.nci.cananolab.service.sample.helper.AdvancedSampleServiceHelper.java

License:BSD License

private List<Characterization> findCharacterizationsBy(String sampleId, AdvancedSampleSearchBean searchBean)
        throws Exception {
    List<Characterization> chars = new ArrayList<Characterization>();
    if (searchBean.getCharacterizationQueries().isEmpty()) {
        return chars;
    }//from   ww w .ja  v  a2  s  .com
    Long id = new Long(sampleId);
    CaNanoLabApplicationService appService = (CaNanoLabApplicationService) ApplicationServiceProvider
            .getApplicationService();
    if (searchBean.getCharacterizationQueries().size() == 1
            || searchBean.getCharacterizationLogicalOperator().equals("or")) {
        DetachedCriteria crit = DetachedCriteria.forClass(Characterization.class, "rootCrit");
        crit.createAlias("sample", "sample");
        // join finding and datum
        if (searchBean.getHasDatum()) {
            crit.createAlias("findingCollection", "finding", CriteriaSpecification.LEFT_JOIN);
            crit.createAlias("finding.datumCollection", "datum", CriteriaSpecification.LEFT_JOIN);
        }
        crit.add(Restrictions.eq("sample.id", id));
        Disjunction charDisjunction = getCharacterizationDisjunction(searchBean, crit, "");
        crit.add(charDisjunction);
        crit.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY);
        List results = appService.query(crit);
        for (int i = 0; i < results.size(); i++) {
            Characterization achar = (Characterization) results.get(i);
            chars.add(achar);
        }
    } else {
        // hibernate doesn't support union have to execute the query one at
        // a time union the result in Java
        for (CharacterizationQueryBean charQuery : searchBean.getCharacterizationQueries()) {
            DetachedCriteria crit = DetachedCriteria.forClass(Characterization.class, "rootCrit");
            crit.createAlias("sample", "sample");
            crit.add(Restrictions.eq("sample.id", id));
            DetachedCriteria subCrit = getCharacterizationSubquery(charQuery, "id");
            crit.add(Subqueries.exists(subCrit));
            crit.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY);
            List results = appService.query(crit);
            for (int i = 0; i < results.size(); i++) {
                Characterization achar = (Characterization) results.get(i);
                if (!chars.contains(achar)) {
                    chars.add(achar);
                }
            }
        }
    }
    Collections.sort(chars, new Comparators.CharacterizationNameAssayTypeDateComparator());
    return chars;
}

From source file:gov.nih.nci.cananolab.service.sample.helper.AdvancedSampleServiceHelper.java

License:BSD License

private List<Datum> findDataBy(Sample sample, AdvancedSampleSearchBean searchBean) throws Exception {
    List<Datum> data = new ArrayList<Datum>();
    Boolean hasDatum = searchBean.getHasDatum();
    if (!hasDatum) {
        return data;
    }/* ww  w .  j  a v a2s  .c o  m*/
    List<Datum> sampleData = new ArrayList<Datum>();
    for (Characterization achar : sample.getCharacterizationCollection()) {
        for (Finding finding : achar.getFindingCollection()) {
            sampleData.addAll(finding.getDatumCollection());
        }
    }
    DetachedCriteria crit = DetachedCriteria.forClass(Datum.class);
    CaNanoLabApplicationService appService = (CaNanoLabApplicationService) ApplicationServiceProvider
            .getApplicationService();
    Junction datumJunction = getDatumJunction(searchBean);
    if (datumJunction != null) {
        crit.add(datumJunction);
        crit.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY);
        List results = appService.query(crit);
        for (int i = 0; i < results.size(); i++) {
            Datum datum = (Datum) results.get(i);
            if (sampleData.contains(datum)) {
                data.add(datum);
            }
        }
    } else {
        // hibernate doesn't support union have to execute the query one at
        // a time union the result in Java
        for (CharacterizationQueryBean charQuery : searchBean.getCharacterizationQueries()) {
            // query for datum only when datum is specified as a search
            // criterion
            if (!StringUtils.isEmpty(charQuery.getDatumName())) {
                crit = DetachedCriteria.forClass(Datum.class, "rootCrit");
                DetachedCriteria subCrit = getDatumSubquery(charQuery, "id");
                crit.add(Subqueries.exists(subCrit));
                crit.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY);
                List results = appService.query(crit);
                for (int i = 0; i < results.size(); i++) {
                    Datum datum = (Datum) results.get(i);
                    if (sampleData.contains(datum)) {
                        data.add(datum);
                    }
                }
            }
        }
    }

    return data;
}

From source file:gov.nih.nci.cananolab.service.sample.helper.AdvancedSampleServiceHelper.java

License:BSD License

private List<FunctionalizingEntity> findFunctionalizingEntitiesBy(String sampleId,
        AdvancedSampleSearchBean searchBean) throws Exception {
    List<FunctionalizingEntity> entities = new ArrayList<FunctionalizingEntity>();
    if (!searchBean.getHasAgentMaterial()) {
        return entities;
    }//from   w w  w  . j  a v a 2s.  c  o  m
    Long id = new Long(sampleId);
    CaNanoLabApplicationService appService = (CaNanoLabApplicationService) ApplicationServiceProvider
            .getApplicationService();
    DetachedCriteria crit = DetachedCriteria.forClass(FunctionalizingEntity.class);
    Junction junction = getFunctionalizingEntityJunction(searchBean, crit);
    if (junction != null) {
        crit.createAlias("sampleComposition", "comp", CriteriaSpecification.LEFT_JOIN);
        crit.createAlias("comp.sample", "sample", CriteriaSpecification.LEFT_JOIN);
        crit.add(Restrictions.eq("sample.id", id));
        crit.add(junction);
        crit.setFetchMode("functionCollection", FetchMode.JOIN);
        crit.setFetchMode("functionCollection.targetCollection", FetchMode.JOIN);
        crit.setFetchMode("fileCollection", FetchMode.JOIN);
        crit.setFetchMode("fileCollection.keywordCollection", FetchMode.JOIN);
        crit.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY);
        List results = appService.query(crit);
        for (int i = 0; i < results.size(); i++) {
            FunctionalizingEntity entity = (FunctionalizingEntity) results.get(i);
            entities.add(entity);
        }
    } else if (searchBean.getFuncEntityCount() > 1) {
        // Hibernate Criteria API doesn't support union, union in java
        for (CompositionQueryBean query : searchBean.getCompositionQueries()) {
            if (query.getCompositionType().equals("functionalizing entity")) {
                crit = DetachedCriteria.forClass(FunctionalizingEntity.class);
                crit.createAlias("sampleComposition", "comp", CriteriaSpecification.LEFT_JOIN);
                crit.createAlias("comp.sample", "sample", CriteriaSpecification.LEFT_JOIN);
                crit.add(Restrictions.eq("sample.id", id));
                DetachedCriteria subCrit = getFunctionalizingEntitySubquery(query, "", "id");
                crit.add(Subqueries.exists(subCrit));
                crit.setFetchMode("functionCollection", FetchMode.JOIN);
                crit.setFetchMode("functionCollection.targetCollection", FetchMode.JOIN);
                crit.setFetchMode("fileCollection", FetchMode.JOIN);
                crit.setFetchMode("fileCollection.keywordCollection", FetchMode.JOIN);
                crit.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY);
                List results = appService.query(crit);
                for (int i = 0; i < results.size(); i++) {
                    FunctionalizingEntity entity = (FunctionalizingEntity) results.get(i);
                    if (!entities.contains(entity)) {
                        entities.add(entity);
                    }
                }
            }
        }
    }
    return entities;
}

From source file:gov.nih.nci.cananolab.service.sample.helper.AdvancedSampleServiceHelper.java

License:BSD License

private List<Function> findFunctionsBy(String sampleId, AdvancedSampleSearchBean searchBean) throws Exception {
    List<Function> functions = new ArrayList<Function>();
    if (!searchBean.getHasFunction()) {
        return functions;
    }// w  ww  . j a v a2 s.  co  m
    Long id = new Long(sampleId);
    CaNanoLabApplicationService appService = (CaNanoLabApplicationService) ApplicationServiceProvider
            .getApplicationService();
    DetachedCriteria crit = DetachedCriteria.forClass(Function.class);
    Junction junction = getFunctionJunction(searchBean, crit);
    if (junction != null) {
        crit.createAlias("composingElement", "ce", CriteriaSpecification.LEFT_JOIN);
        crit.createAlias("ce.nanomaterialEntity", "nanoEntity", CriteriaSpecification.LEFT_JOIN);
        crit.createAlias("nanoEntity.sampleComposition", "comp", CriteriaSpecification.LEFT_JOIN);
        crit.createAlias("comp.sample", "sample", CriteriaSpecification.LEFT_JOIN);
        crit.createAlias("functionalizingEntity", "funcEntity", CriteriaSpecification.LEFT_JOIN);
        crit.createAlias("funcEntity.sampleComposition", "comp2", CriteriaSpecification.LEFT_JOIN);
        crit.createAlias("comp2.sample", "sample2", CriteriaSpecification.LEFT_JOIN);
        crit.add(Restrictions.or(Restrictions.eq("sample.id", id), Restrictions.eq("sample2.id", id)));
        crit.add(junction);
        crit.setFetchMode("targetCollection", FetchMode.JOIN);

        List results = appService.query(crit);
        for (int i = 0; i < results.size(); i++) {
            Function function = (Function) results.get(i);
            functions.add(function);
        }
    } else if (searchBean.getFuncCount() > 1) {
        // Hibernate Criteria API doesn't support union, union in java
        for (CompositionQueryBean query : searchBean.getCompositionQueries()) {
            if (query.getCompositionType().equals("function")) {
                crit = DetachedCriteria.forClass(Function.class);
                crit.createAlias("composingElement", "ce", CriteriaSpecification.LEFT_JOIN);
                crit.createAlias("ce.nanomaterialEntity", "nanoEntity", CriteriaSpecification.LEFT_JOIN);
                crit.createAlias("nanoEntity.sampleComposition", "comp", CriteriaSpecification.LEFT_JOIN);
                crit.createAlias("comp.sample", "sample", CriteriaSpecification.LEFT_JOIN);
                crit.createAlias("functionalizingEntity", "funcEntity", CriteriaSpecification.LEFT_JOIN);
                crit.createAlias("funcEntity.sampleComposition", "comp2", CriteriaSpecification.LEFT_JOIN);
                crit.createAlias("comp2.sample", "sample2", CriteriaSpecification.LEFT_JOIN);
                crit.add(Restrictions.or(Restrictions.eq("sample.id", id), Restrictions.eq("sample2.id", id)));
                DetachedCriteria subCrit = getFunctionSubquery(query, "", "", "id");
                crit.add(Subqueries.exists(subCrit));
                crit.setFetchMode("targetCollection", FetchMode.JOIN);
                crit.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY);
                List results = appService.query(crit);
                for (int i = 0; i < results.size(); i++) {
                    Function function = (Function) results.get(i);
                    if (!functions.contains(function)) {
                        functions.add(function);
                    }
                }
            }
        }
    }
    return functions;
}