test.eurocarbdb.dataaccess.core.SubQueryTest.java Source code

Java tutorial

Introduction

Here is the source code for test.eurocarbdb.dataaccess.core.SubQueryTest.java

Source

/*
*   EuroCarbDB, a framework for carbohydrate bioinformatics
*
*   Copyright (c) 2006-2009, Eurocarb project, or third-party contributors as
*   indicated by the @author tags or express copyright attribution
*   statements applied by the authors.  
*
*   This copyrighted material is made available to anyone wishing to use, modify,
*   copy, or redistribute it subject to the terms and conditions of the GNU
*   Lesser General Public License, as published by the Free Software Foundation.
*   A copy of this license accompanies this distribution in the file LICENSE.txt.
*
*   This program is distributed in the hope that it will be useful,
*   but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
*   or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
*   for more details.
*
*   Last commit: $Rev: 1210 $ by $Author: glycoslave $ on $Date:: 2009-06-12 #$  
*/

package test.eurocarbdb.dataaccess.core;

import java.util.*;

import org.testng.annotations.*;

import org.eurocarbdb.dataaccess.Eurocarb;
import org.eurocarbdb.dataaccess.EntityManager;
import org.eurocarbdb.dataaccess.HibernateEntityManager;

import org.eurocarbdb.dataaccess.core.*;

import org.hibernate.Criteria;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.CriteriaSpecification;
import org.hibernate.criterion.*;

import test.eurocarbdb.dataaccess.CoreApplicationTest;

/**
*   @author mjh
*   @version $Rev: 1210 $
*/
@Test(groups = { "ecdb.db.core.hibernate" }, dependsOnGroups = { "ecdb.db.connection" })
public class SubQueryTest extends CoreApplicationTest {
    EntityManager em = Eurocarb.getEntityManager();

    // private GlycanSequence gs1;

    public void canSubQuery() {
        super.setup();
        String taxonomyName = "homo sapiens";

        Criteria q = em.createQuery(GlycanSequence.class).setMaxResults(20);

        List<GlycanSequence> seqlist1 = (List<GlycanSequence>) q.list();

        System.out.println(seqlist1.size());

        Criteria bc_criteria;
        Criteria tax_criteria;

        Criteria criteria = em.createQuery(GlycanSequence.class).setMaxResults(20);
        bc_criteria = criteria.createCriteria("glycanContexts").createCriteria("biologicalContext", "bc");

        // add taxonomy criteria        
        if (taxonomyName != null) {
            tax_criteria = bc_criteria.createCriteria("taxonomy", "taxa")
                    .createCriteria("taxonomySupertypes", "supertax")
                    .add(Restrictions.ilike("taxon", taxonomyName, MatchMode.EXACT));
        }

        System.out.println(criteria.list().size());

        super.teardown();
    }

    public void canSimpleDetachedSubQuery() {
        super.setup();

        //Criteria subcriteria = em.createQuery( GlycanSequence.class ).setMaxResults( 20 );
        DetachedCriteria subcriteria = DetachedCriteria.forClass(GlycanSequence.class);

        DetachedCriteria criteria;

        criteria = DetachedCriteria.forClass(GlycanSequence.class);

        //        criteria.add( Restrictions.lt( "glycanSequenceId", 100));
        DetachedCriteria bc_crit = criteria.createCriteria("glycanContexts");

        //DetachedCriteria bc_crit = DetachedCriteria.forClass( GlycanSequenceContext.class );

        //criteria.createCriteria("glycanContexts");

        bc_crit.add(Restrictions.gt("glycanSequenceContextId", 0));
        bc_crit.setProjection(Projections.property("glycanSequenceContextId"));

        criteria.add(Subqueries.propertyIn("glycanSequenceContextId", bc_crit));

        criteria.setProjection(Projections.distinct(Projections.property("glycanSequenceId")));

        subcriteria.add(Subqueries.propertyIn("glycanSequenceId", criteria));

        //System.out.println(subcriteria.list().size());
        //subcriteria.getExecutableCriteria(((HibernateEntityManager) em).getHibernateSession()).setMaxResults(20).list();

        super.teardown();
    }

    public void canDetachedSubQuery() {
        super.setup();
        String taxonomyName = "homo sapiens";

        //Criteria subcriteria = em.createQuery( GlycanSequence.class ).setMaxResults( 20 );
        DetachedCriteria subcriteria = DetachedCriteria.forClass(GlycanSequence.class);

        DetachedCriteria criteria;

        criteria = DetachedCriteria.forClass(GlycanSequence.class);

        DetachedCriteria bc_criteria;
        DetachedCriteria tax_criteria;

        bc_criteria = criteria.createCriteria("glycanContexts").createCriteria("biologicalContext", "bc");

        // add taxonomy criteria        
        if (taxonomyName != null) {
            tax_criteria = bc_criteria.createCriteria("taxonomy", "taxa")
                    .createCriteria("taxonomySupertypes", "supertax")
                    .add(Restrictions.ilike("taxon", taxonomyName, MatchMode.EXACT));
        }

        criteria.setProjection(Projections.distinct(Projections.property("glycanSequenceId")));

        subcriteria.add(Subqueries.propertyIn("glycanSequenceId", criteria));

        //System.out.println(subcriteria.list().size());
        subcriteria.getExecutableCriteria(((HibernateEntityManager) em).getHibernateSession()).list();

        super.teardown();
    }

} // end class