Example usage for org.hibernate.criterion CriteriaQuery getSQLAlias

List of usage examples for org.hibernate.criterion CriteriaQuery getSQLAlias

Introduction

In this page you can find the example usage for org.hibernate.criterion CriteriaQuery getSQLAlias.

Prototype

public String getSQLAlias(Criteria criteria);

Source Link

Document

Get the root table alias of an entity

Usage

From source file:com.amalto.core.storage.hibernate.FieldTypeCriterion.java

License:Open Source License

@Override
public String toSqlString(Criteria criteria, CriteriaQuery criteriaQuery) throws HibernateException {
    return "(" //$NON-NLS-1$
            + criteriaQuery.getSQLAlias(this.criteria) + "." //$NON-NLS-1$
            + MappingGenerator.DISCRIMINATOR_NAME + " = '" //$NON-NLS-1$
            + typeName + "')"; //$NON-NLS-1$
}

From source file:com.amalto.core.storage.hibernate.ManyFieldCriterion.java

License:Open Source License

@Override
public String toSqlString(Criteria criteria, CriteriaQuery criteriaQuery) throws HibernateException {
    if (field instanceof ReferenceFieldMetadata && position < 0) {
        return field.accept(new ForeignKeySQLGenerator(criteriaQuery, value));
    } else {/*w w  w  . j  a  va 2s  . co m*/
        if (value instanceof Object[]) {
            throw new UnsupportedOperationException(
                    "Do not support collection search criteria with multiple values."); //$NON-NLS-1$
        }
        ComplexTypeMetadata type = field.getContainingType();
        if (type.getKeyFields().size() > 1) {
            throw new UnsupportedOperationException(
                    "Do not support collection search if main type has a composite key."); //$NON-NLS-1$
        }
        String containingTypeAlias = criteriaQuery.getSQLAlias(typeCriteria);
        String containingType = resolver.get(type);
        String containingTypeKey = resolver.get(type.getKeyFields().iterator().next());
        StringBuilder builder = new StringBuilder();
        String joinedTableName = resolver.getCollectionTable(field);
        String columnName;
        if (field instanceof ReferenceFieldMetadata) {
            // Naming convention in MDM for repeatable FKs: "x_stores_store" (database field name) + "_" + "x_id"
            // (referenced field name).
            columnName = field.getName() + '_'
                    + ((ReferenceFieldMetadata) field).getReferencedField().getName();
        } else {
            columnName = "value"; //$NON-NLS-1$
        }
        builder.append("(SELECT COUNT(1) FROM ") //$NON-NLS-1$
                .append(containingType).append(" INNER JOIN ") //$NON-NLS-1$
                .append(joinedTableName).append(" ON ") //$NON-NLS-1$
                .append(containingType).append(".") //$NON-NLS-1$
                .append(containingTypeKey).append(" = ") //$NON-NLS-1$
                .append(joinedTableName).append(".") //$NON-NLS-1$
                .append(containingTypeKey).append(" WHERE ") //$NON-NLS-1$
                .append(joinedTableName).append("." + columnName + " = '") //$NON-NLS-1$ //$NON-NLS-2$
                .append(value).append("'"); //$NON-NLS-1$
        if (position >= 0) {
            builder.append(" AND ").append(joinedTableName).append(".pos = ").append(position); //$NON-NLS-1$ //$NON-NLS-2$
        }
        builder.append(" AND ") //$NON-NLS-1$
                .append(containingType).append(".") //$NON-NLS-1$
                .append(containingTypeKey).append(" = ") //$NON-NLS-1$
                .append(containingTypeAlias).append(".") //$NON-NLS-1$
                .append(containingTypeKey).append(") > 0"); //$NON-NLS-1$
        return builder.toString();
    }
}

From source file:com.amalto.core.storage.hibernate.ManyFieldProjection.java

License:Open Source License

@Override
public String toSqlString(Criteria criteria, int position, CriteriaQuery criteriaQuery)
        throws HibernateException {
    Criteria subCriteria = StandardQueryHandler.findCriteria(criteria, aliases);
    ComplexTypeMetadata containingType = field.getContainingType();
    String containerTable = resolver.get(containingType);
    String collectionTable = resolver.getCollectionTable(field);
    String containerIdColumn = resolver.get(containingType.getKeyFields().iterator().next());
    StringBuilder sqlFragment = new StringBuilder();
    switch (dataSource.getDialectName()) {
    // For Postgres, uses "string_agg" function (introduced in 9.0).
    case POSTGRES:
        sqlFragment.append("(select string_agg(") //$NON-NLS-1$
                .append(collectionTable).append(".value, ',') FROM ").append(containerTable); //$NON-NLS-1$
        for (FieldMetadata currentKey : containingType.getKeyFields()) {
            String keyName = resolver.get(currentKey);
            sqlFragment.append(" INNER JOIN ") //$NON-NLS-1$
                    .append(collectionTable).append(" on ") //$NON-NLS-1$
                    .append(containerTable).append('.').append(keyName).append(" = ") //$NON-NLS-1$
                    .append(collectionTable).append('.').append(keyName);
        }/*www . j  av  a  2s  . co  m*/
        sqlFragment.append(" WHERE ") //$NON-NLS-1$
                .append(containerTable).append('.').append(containerIdColumn).append(" = ") //$NON-NLS-1$
                .append(criteriaQuery.getSQLAlias(subCriteria)).append('.').append(containerIdColumn)
                .append(") as y").append(position).append('_'); //$NON-NLS-1$
        break;
    // Following databases support group_concat function
    case H2:
    case MYSQL:
        sqlFragment.append("(select group_concat(") //$NON-NLS-1$
                .append(collectionTable).append(".value separator ',') FROM ").append(containerTable); //$NON-NLS-1$
        for (FieldMetadata currentKey : containingType.getKeyFields()) {
            String keyName = resolver.get(currentKey);
            sqlFragment.append(" INNER JOIN ") //$NON-NLS-1$
                    .append(collectionTable).append(" on ") //$NON-NLS-1$
                    .append(containerTable).append('.').append(keyName).append(" = ") //$NON-NLS-1$
                    .append(collectionTable).append('.').append(keyName);
        }
        sqlFragment.append(" WHERE ") //$NON-NLS-1$
                .append(containerTable).append('.').append(containerIdColumn).append(" = ") //$NON-NLS-1$
                .append(criteriaQuery.getSQLAlias(subCriteria)).append('.').append(containerIdColumn)
                .append(") as y").append(position).append('_'); //$NON-NLS-1$
        break;
    // Use Oracle 10g "listagg" function (no group_concat on Oracle).
    case ORACLE_10G:
        sqlFragment.append("(select listagg(") //$NON-NLS-1$
                .append(collectionTable).append(".value, ',') WITHIN GROUP (ORDER BY pos) FROM ") //$NON-NLS-1$
                .append(containerTable);
        for (FieldMetadata currentKey : containingType.getKeyFields()) {
            String keyName = resolver.get(currentKey);
            sqlFragment.append(" INNER JOIN ") //$NON-NLS-1$
                    .append(collectionTable).append(" on ") //$NON-NLS-1$
                    .append(containerTable).append('.').append(keyName).append(" = ") //$NON-NLS-1$
                    .append(collectionTable).append('.').append(keyName);
        }
        sqlFragment.append(" WHERE ") //$NON-NLS-1$
                .append(containerTable).append('.').append(containerIdColumn).append(" = ") //$NON-NLS-1$
                .append(criteriaQuery.getSQLAlias(subCriteria)).append('.').append(containerIdColumn)
                .append(") as y").append(position).append('_'); //$NON-NLS-1$
        break;
    // SQL Server doesn't support the group_concat function -> use "stuff" function
    case SQL_SERVER:
        sqlFragment.append("STUFF((select ',' + ") //$NON-NLS-1$
                .append(collectionTable).append(".value FROM ").append(containerTable); //$NON-NLS-1$
        for (FieldMetadata currentKey : containingType.getKeyFields()) {
            String keyName = resolver.get(currentKey);
            sqlFragment.append(" INNER JOIN ") //$NON-NLS-1$
                    .append(collectionTable).append(" on ") //$NON-NLS-1$
                    .append(containerTable).append('.').append(keyName).append(" = ") //$NON-NLS-1$
                    .append(collectionTable).append('.').append(keyName);
        }
        sqlFragment.append(" WHERE ") //$NON-NLS-1$
                .append(containerTable).append('.').append(containerIdColumn).append(" = ") //$NON-NLS-1$
                .append(criteriaQuery.getSQLAlias(subCriteria)).append('.').append(containerIdColumn)
                .append(" FOR XML PATH ('')), 1, 1, '') as y").append(position).append('_'); //$NON-NLS-1$
        break;
    // DB2 supports listagg() function after DB2 9.7
    case DB2:
        sqlFragment.append("(select listagg(") //$NON-NLS-1$
                .append(collectionTable).append(".value, ',') WITHIN GROUP (ORDER BY pos) FROM ") //$NON-NLS-1$
                .append(containerTable);
        for (FieldMetadata currentKey : containingType.getKeyFields()) {
            String keyName = resolver.get(currentKey);
            sqlFragment.append(" INNER JOIN ") //$NON-NLS-1$
                    .append(collectionTable).append(" on ") //$NON-NLS-1$
                    .append(containerTable).append('.').append(keyName).append(" = ") //$NON-NLS-1$
                    .append(collectionTable).append('.').append(keyName);
        }
        sqlFragment.append(" WHERE ") //$NON-NLS-1$
                .append(containerTable).append('.').append(containerIdColumn).append(" = ") //$NON-NLS-1$
                .append(criteriaQuery.getSQLAlias(subCriteria)).append('.').append(containerIdColumn)
                .append(") as y").append(position).append('_'); //$NON-NLS-1$
        break;
    default:
        throw new NotImplementedException("Support for repeatable element not implemented for dialect '"
                + dataSource.getDialectName() + "'.");
    }
    return sqlFragment.toString();
}

From source file:com.gisgraphy.hibernate.criterion.DistanceOrder.java

License:Open Source License

@Override
public String toSqlString(Criteria criteria, CriteriaQuery criteriaQuery) throws HibernateException {
    StringBuilder fragment = new StringBuilder();
    fragment.append(" st_distance_sphere(");
    fragment.append(criteriaQuery.getSQLAlias(criteria));
    fragment.append(".location, st_geometryfromtext('");
    fragment.append(point.toText());//from   w w  w .j a v  a  2  s.c  om
    fragment.append("',");
    fragment.append(SRID.WGS84_SRID.getSRID());
    fragment.append(ascending ? ")) asc" : ")) desc");
    return fragment.toString();
}

From source file:com.gisgraphy.hibernate.criterion.DistanceOrderTest.java

License:Open Source License

@Test
public void distanceOrderPointBooleanShouldTakeAscOrderIntoAccount() {
    CriteriaQuery criteriaQuery = EasyMock.createMock(CriteriaQuery.class);
    EasyMock.expect(criteriaQuery.getSQLAlias((Criteria) EasyMock.anyObject())).andReturn("alias ").once();
    EasyMock.replay(criteriaQuery);/*from ww  w.  j  a  v  a2s . c om*/
    DistanceOrder distanceOrder = new DistanceOrder(GisgraphyTestHelper.createPoint(3F, 4F), true);
    String sqlString = distanceOrder.toSqlString(null, criteriaQuery);
    assertTrue(sqlString.contains("asc"));
    assertTrue(sqlString.contains("st_distance_sphere"));
    EasyMock.verify(criteriaQuery);
}

From source file:com.gisgraphy.hibernate.criterion.DistanceOrderTest.java

License:Open Source License

@Test
public void distanceOrderShouldHaveAscOrderByDefault() {
    CriteriaQuery criteriaQuery = EasyMock.createMock(CriteriaQuery.class);
    EasyMock.expect(criteriaQuery.getSQLAlias((Criteria) EasyMock.anyObject())).andReturn("alias ").once();
    EasyMock.replay(criteriaQuery);/*from   w w  w .j  a  va  2s  .c  o m*/
    DistanceOrder dorder = new DistanceOrder(GisgraphyTestHelper.createPoint(3F, 4F));
    String sqlString = dorder.toSqlString(null, criteriaQuery);
    assertTrue(sqlString.contains("asc"));
    assertTrue(sqlString.contains("st_distance_sphere"));
    EasyMock.verify(criteriaQuery);
}

From source file:com.gisgraphy.hibernate.criterion.DistanceOrderTest.java

License:Open Source License

@Test
public void distanceOrderPointBooleanShouldTakeDescOrderIntoAccount() {
    CriteriaQuery criteriaQuery = EasyMock.createMock(CriteriaQuery.class);
    EasyMock.expect(criteriaQuery.getSQLAlias((Criteria) EasyMock.anyObject())).andReturn(" alias ").once();
    EasyMock.replay(criteriaQuery);//from  w  ww  .  j  a v  a 2s . c  o  m
    DistanceOrder dorder = new DistanceOrder(GisgraphyTestHelper.createPoint(3F, 4F), false);
    String sqlString = dorder.toSqlString(null, criteriaQuery);
    assertTrue(sqlString.contains("desc"));
    assertTrue(sqlString.contains("st_distance_sphere"));
    EasyMock.verify(criteriaQuery);
}

From source file:com.gisgraphy.hibernate.criterion.DistanceRestriction.java

License:Open Source License

public String toSqlString(Criteria criteria, CriteriaQuery criteriaQuery) throws HibernateException {
    String columnName = criteriaQuery.getColumn(criteria, GisFeature.LOCATION_COLUMN_NAME);
    StringBuffer result = new StringBuffer("( st_distance_sphere(").append(columnName).append(", ?) <=")
            .append(this.distance).append(")");
    return useIndex
            ? result.append(" AND ").append(GisHelper.getBoundingBox(criteriaQuery.getSQLAlias(criteria),
                    this.point.getY(), this.point.getX(), distance)).toString()
            : result.toString();/*from  w w w  .  j  a va2s  .  c  o  m*/

}

From source file:com.gisgraphy.hibernate.criterion.DistanceRestrictionTest.java

License:Open Source License

@Test
public void testDistanceRestrictionPointDoubleBooleanShouldUseIndexIfUseIndexTrue() {
    CriteriaQuery criteriaQuery = EasyMock.createMock(CriteriaQuery.class);
    EasyMock.expect(criteriaQuery.getColumn((Criteria) EasyMock.anyObject(),
            EasyMock.eq(GisFeature.LOCATION_COLUMN_NAME))).andReturn("").once();
    EasyMock.expect(criteriaQuery.getSQLAlias((Criteria) EasyMock.anyObject())).andReturn("").once();
    EasyMock.replay(criteriaQuery);//from  www.jav a 2  s  .  c  o m
    DistanceRestriction dr = new DistanceRestriction(GisgraphyTestHelper.createPoint(3F, 4F), 4D, true);
    String sqlString = dr.toSqlString(null, criteriaQuery);
    assertTrue(sqlString.contains(" && "));
    EasyMock.verify(criteriaQuery);
}

From source file:com.gisgraphy.hibernate.criterion.NativeSQLOrder.java

License:Open Source License

@Override
public String toSqlString(Criteria criteria, CriteriaQuery criteriaQuery) throws HibernateException {
    StringBuilder fragment = new StringBuilder();
    fragment.append("(");
    fragment.append(sql);/*from ww  w .  j  av a 2  s. c  om*/
    fragment.append(")");
    fragment.append(ascending ? " asc" : " desc");
    return StringHelper.replace(fragment.toString(), "{alias}", criteriaQuery.getSQLAlias(criteria));
}