Example usage for org.hibernate.criterion CriteriaQuery getTypeUsingProjection

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

Introduction

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

Prototype

public Type getTypeUsingProjection(Criteria criteria, String propertyPath) throws HibernateException;

Source Link

Document

Get the type of a property path.

Usage

From source file:com.belle.yitiansystem.merchant.service.impl.MerchantsService.java

@Override
public String toSqlString(Criteria criteria, CriteriaQuery criteriaQuery) throws HibernateException {
    String[] columns = criteriaQuery.getColumnsUsingProjection(criteria, propertyName);
    Type type = criteriaQuery.getTypeUsingProjection(criteria, propertyName);
    StringBuffer fragment = new StringBuffer();
    for (int i = 0; i < columns.length; i++) {
        SessionFactoryImplementor factory = criteriaQuery.getFactory();
        boolean lower = ignoreCase && type.sqlTypes(factory)[i] == Types.VARCHAR;
        if (lower) {
            fragment.append(factory.getDialect().getLowercaseFunction()).append('(');
        }/* w  w w .  j ava  2  s.  c om*/
        fragment.append("CONVERT( " + columns[i] + " USING " + encoding + " )");
        if (lower)
            fragment.append(')');
        fragment.append(ascending ? " asc" : " desc");
        if (i < columns.length - 1)
            fragment.append(", ");
    }
    return fragment.toString();
}

From source file:corner.orm.hibernate.expression.StringExpression.java

License:Apache License

/**
 * @see org.hibernate.criterion.Criterion#toSqlString(org.hibernate.Criteria,
 *      org.hibernate.criterion.CriteriaQuery)
 *//*w  w w .  j  a  va  2 s .  co  m*/
public String toSqlString(Criteria criteria, CriteriaQuery criteriaQuery) throws HibernateException {
    String[] columns = criteriaQuery.getColumnsUsingProjection(criteria, propertyName);
    Type type = criteriaQuery.getTypeUsingProjection(criteria, propertyName);
    StringBuffer fragment = new StringBuffer();
    if (columns.length > 1)
        fragment.append('(');
    SessionFactoryImplementor factory = criteriaQuery.getFactory();
    int[] sqlTypes = type.sqlTypes(factory);
    for (int i = 0; i < columns.length; i++) {
        boolean lower = ignoreCase && (sqlTypes[i] == Types.VARCHAR || sqlTypes[i] == Types.CHAR);
        //??1
        if (exps.size() > 1) {
            fragment.append('(');
        }
        for (ExpPair p : exps) {
            fragment.append(" " + p.exp + " ");
            if (lower) {
                fragment.append(factory.getDialect().getLowercaseFunction()).append('(');
            }
            fragment.append(columns[i]);
            if (lower)
                fragment.append(')');
            fragment.append(getOp()).append("?");

        }
        if (exps.size() > 1) {
            fragment.append(')');
        }

        if (i < columns.length - 1)
            fragment.append(" and ");
    }
    if (columns.length > 1)
        fragment.append(')');
    return fragment.toString();

}

From source file:ispyb.server.common.util.ejb.CastDecimalOrder.java

License:Open Source License

/**
 * render the SQL fragment 'CAST(name AS DECIMAL)'
 */// w w w . j  a  v  a  2 s .  com
@Override
public String toSqlString(Criteria criteria, CriteriaQuery criteriaQuery) throws HibernateException {
    String[] columns = criteriaQuery.getColumnsUsingProjection(criteria, propertyName);
    Type type = criteriaQuery.getTypeUsingProjection(criteria, propertyName);
    StringBuffer fragment = new StringBuffer();
    fragment.append("CAST(");
    for (int i = 0; i < columns.length; i++) {
        SessionFactoryImplementor factory = criteriaQuery.getFactory();
        boolean lower = ignoreCase && type.sqlTypes(factory)[i] == Types.VARCHAR;
        if (lower) {
            fragment.append(factory.getDialect().getLowercaseFunction()).append('(');
        }
        fragment.append(columns[i]);
        if (lower)
            fragment.append(')');
        fragment.append(" AS DECIMAL)");
        //fragment.append( ascending ? " asc" : " desc" );
        if (i < columns.length - 1)
            fragment.append(", ");
    }
    return fragment.toString();
}

From source file:org.eulerframework.web.core.extend.hibernate5.InExpressionX.java

License:Apache License

@Override
public TypedValue[] getTypedValues(Criteria criteria, CriteriaQuery criteriaQuery) {
    final ArrayList<TypedValue> list = new ArrayList<TypedValue>();
    final Type type = criteriaQuery.getTypeUsingProjection(criteria, propertyName);
    if (type.isComponentType()) {
        final CompositeType compositeType = (CompositeType) type;
        final Type[] subTypes = compositeType.getSubtypes();
        for (Object value : values) {
            for (int i = 0; i < subTypes.length; i++) {
                final Object subValue = value == null ? null
                        : compositeType.getPropertyValues(value, EntityMode.POJO)[i];
                list.add(new TypedValue(subTypes[i], subValue));
            }// w  w w  .  j a  v  a  2s  .c om
        }
    } else {
        for (Object value : values) {
            list.add(new TypedValue(type, value));
        }
    }

    return list.toArray(new TypedValue[list.size()]);
}

From source file:org.jasig.ssp.util.hibernate.OrderAsString.java

License:Apache License

/**
 * Mainly a copy/paste of {@link Order#toSqlString(org.hibernate.Criteria, org.hibernate.criterion.CriteriaQuery)}
 * with column name rendering modified to wrap column names in a function
 * call. The super class impl was sufficiently monolothic that the only
 * alternative was to implement a find-and-replace on column names in its
 * output. But the Hibernate code should be stable enough that a copy/paste
 * is much less risky than an impl that might accidentally replace
 * substrings instead of entire column names.
 *
 * @param criteria/*from   w  w w  .ja v  a2s.c om*/
 * @param criteriaQuery
 * @return
 * @throws HibernateException
 */
@Override
public String toSqlString(Criteria criteria, CriteriaQuery criteriaQuery) throws HibernateException {

    String[] columns = criteriaQuery.getColumnsUsingProjection(criteria, propertyName);
    Type type = criteriaQuery.getTypeUsingProjection(criteria, propertyName);
    StringBuffer fragment = new StringBuffer();
    for (int i = 0; i < columns.length; i++) {
        SessionFactoryImplementor factory = criteriaQuery.getFactory();
        boolean lower = ignoreCase && type.sqlTypes(factory)[i] == Types.VARCHAR;
        if (lower) {
            fragment.append(factory.getDialect().getLowercaseFunction()).append('(');
        }

        // org.hibernate.criterion.Order.toSqlString has this:
        //fragment.append( columns[i] );

        // which we replace with:
        fragment.append(castToSqlString(columns[i], type, criteriaQuery));

        if (lower)
            fragment.append(')');
        fragment.append(ascending ? " asc" : " desc");
        if (i < columns.length - 1)
            fragment.append(", ");
    }
    return fragment.toString();

}