public Object doInHibernate(Session session) throws HibernateException, SQLException { CriteriaImpl impl = (CriteriaImpl) criteria; Criteria totalCriteria = session.createCriteria(impl.getEntityOrClassName()); hibernateTemplate.applySettings(totalCriteria); Iterator iterator = impl.iterateExpressionEntries(); while (iterator.hasNext()) { CriteriaImpl.CriterionEntry entry = (CriteriaImpl.CriterionEntry) iterator.next(); totalCriteria.add(entry.getCriterion()); } Iterator subcriteriaIterator = impl.iterateSubcriteria(); while (subcriteriaIterator.hasNext()) { CriteriaImpl.Subcriteria sub = (CriteriaImpl.Subcriteria) subcriteriaIterator.next(); totalCriteria.createAlias(sub.getPath(), sub.getAlias(), sub.getJoinType(), sub.getWithClause()); } totalCriteria.setProjection(impl.getProjection()); totalCriteria.setProjection(Projections.rowCount()); return ((Number)totalCriteria.uniqueResult()).intValue(); } });
while ( iter.hasNext() ) { CriteriaImpl.Subcriteria subcriteria = ( CriteriaImpl.Subcriteria ) iter.next(); LockMode lm = subcriteria.getLockMode(); if ( lm != null ) { lockModes.put( getSQLAlias( subcriteria ), lm );
while ( iter.hasNext() ) { CriteriaImpl.Subcriteria subcriteria = (CriteriaImpl.Subcriteria) iter.next(); LockMode lm = subcriteria.getLockMode(); if (lm!=null) lockModes.put( getSQLAlias(subcriteria), lm );
private String getWholeAssociationPath(CriteriaImpl.Subcriteria subcriteria) { String path = subcriteria.getPath(); // some messy, complex stuff here, since createCriteria() can take an // aliased path, or a path rooted at the creating criteria instance Criteria parent = null; if ( path.indexOf('.')>0 ) { //if it is a compound path String testAlias = StringHelper.root(path); if ( !testAlias.equals( subcriteria.getAlias() ) ) { //and the qualifier is not the alias of this criteria parent = (Criteria) aliasCriteriaMap.get(testAlias); //check to see if we belong to some criteria other than the one that created us } } if (parent==null) { parent = subcriteria.getParent(); //otherwise assume the parent is the the criteria that created us } else { path = StringHelper.unroot(path); } if ( parent.equals(rootCriteria) ) { //if its the root criteria, we are done return path; } else { return getWholeAssociationPath( (CriteriaImpl.Subcriteria) parent ) + '.' + path; //otherwise, recurse } }
private void createAssociationPathCriteriaMap() { Iterator iter = rootCriteria.iterateSubcriteria(); while ( iter.hasNext() ) { CriteriaImpl.Subcriteria crit = ( CriteriaImpl.Subcriteria ) iter.next(); String wholeAssociationPath = getWholeAssociationPath( crit ); Object old = associationPathCriteriaMap.put( wholeAssociationPath, crit ); if ( old != null ) { throw new QueryException( "duplicate association path: " + wholeAssociationPath ); } int joinType = crit.getJoinType(); old = associationPathJoinTypesMap.put( wholeAssociationPath, new Integer( joinType ) ); if ( old != null ) { // TODO : not so sure this is needed... throw new QueryException( "duplicate association path: " + wholeAssociationPath ); } } }
public Criteria createCriteria(String associationPath, String alias, int joinType) throws HibernateException { return new Subcriteria( Subcriteria.this, associationPath, alias, joinType ); }
public Criteria createCriteria(String associationPath, int joinType) throws HibernateException { return new Subcriteria( Subcriteria.this, associationPath, joinType ); }
protected Map<Subcriteria, Order> getSortSubcriteriaFromCriteria(Criteria executable){ List<Subcriteria> subcriteriaList = getCriteriaSubcriteria(executable); List<Order> orderings = getOrderingFromCriteria(executable); Map<Subcriteria, Order> aliasToOrderMap = new HashMap<Subcriteria, Order>(); for(Order order : orderings){ for(Subcriteria subcriteria : subcriteriaList){ if(order.toString().startsWith(subcriteria.getAlias()+ ".")){ aliasToOrderMap.put(subcriteria, order); } } } return aliasToOrderMap; } protected List<Subcriteria> getCriteriaSubcriteria(Criteria executable){
public Criteria createCriteria(String associationPath, String alias, int joinType) { return new Subcriteria( this, associationPath, alias, joinType ); }
public Criteria createCriteria(String associationPath, int joinType) { return new Subcriteria( this, associationPath, joinType ); }
public Criteria createCriteria(String associationPath) throws HibernateException { return new Subcriteria(this, associationPath); }
public Criteria createCriteria(String associationPath, String alias) throws HibernateException { return new Subcriteria(Subcriteria.this, associationPath, alias); }
public Criteria createAlias(String associationPath, String alias, int joinType) { new Subcriteria( this, associationPath, alias, joinType ); return this; }
public Criteria createCriteria(String associationPath) throws HibernateException { return new Subcriteria(Subcriteria.this, associationPath); }
public Criteria createCriteria(String associationPath, String alias) throws HibernateException { return new Subcriteria(this, associationPath, alias); }
protected void copyOrdersAndTheirSubcriteriaFromCriteriaToAnother(Criteria executable, DetachedCriteria criteria){ Map<Subcriteria, Order> aliasToOrderMap = getSortSubcriteriaFromCriteria(executable); for(Subcriteria subcriteria : aliasToOrderMap.keySet()){ criteria.createAlias(subcriteria.getPath(), subcriteria.getAlias(), subcriteria.getJoinType()); } for(Order order : aliasToOrderMap.values()){ criteria.addOrder(order); } }
public HibernateCriteriaCriteria(final Class cls, final Criteria criteria, final int resultType) { super(cls, resultType); Criteria rootCriteria = criteria; while (!(rootCriteria instanceof CriteriaImpl)) { Assert.assertTrue(rootCriteria instanceof CriteriaImpl.Subcriteria); rootCriteria = ((CriteriaImpl.Subcriteria) rootCriteria).getParent(); Assert.assertFalse(criteria == rootCriteria); // if circular reference could loop forever } this.criteria = (CriteriaImpl) rootCriteria; }
public Criteria createAlias(String associationPath, String alias, int joinType) throws HibernateException { new Subcriteria( this, associationPath, alias, joinType ); return this; }
public Criteria setProjection(Projection projection) { CriteriaImpl.this.projection = projection; CriteriaImpl.this.projectionCriteria = this; setResultTransformer(PROJECTION); return this; } }