/* * 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