List of usage examples for org.hibernate.persister.entity PropertyMapping toColumns
public String[] toColumns(String alias, String propertyName) throws QueryException;
From source file:org.codehaus.groovy.grails.orm.hibernate.query.AbstractHibernateQuery.java
License:Apache License
org.hibernate.criterion.Criterion getRestrictionForFunctionCall(FunctionCallingCriterion criterion,
PersistentEntity entity) {//from www .j a v a 2s. c o m
org.hibernate.criterion.Criterion sqlRestriction;
SessionFactory sessionFactory = ((IHibernateTemplate) session.getNativeInterface()).getSessionFactory();
String property = criterion.getProperty();
Criterion datastoreCriterion = criterion.getPropertyCriterion();
PersistentProperty pp = entity.getPropertyByName(property);
if (pp == null)
throw new InvalidDataAccessResourceUsageException(
"Cannot execute function defined in query [" + criterion.getFunctionName()
+ "] on non-existent property [" + property + "] of [" + entity.getJavaClass() + "]");
String functionName = criterion.getFunctionName();
Dialect dialect = getDialect(sessionFactory);
SQLFunction sqlFunction = dialect.getFunctions().get(functionName);
if (sqlFunction != null) {
TypeResolver typeResolver = getTypeResolver(sessionFactory);
BasicType basic = typeResolver.basic(pp.getType().getName());
if (basic != null && datastoreCriterion instanceof PropertyCriterion) {
PropertyCriterion pc = (PropertyCriterion) datastoreCriterion;
final org.hibernate.criterion.Criterion hibernateCriterion = createHibernateCriterionAdapter(
getEntity(), datastoreCriterion, alias).toHibernateCriterion(this);
if (hibernateCriterion instanceof SimpleExpression) {
SimpleExpression expr = (SimpleExpression) hibernateCriterion;
Object op = ReflectionUtils.getField(opField, expr);
PropertyMapping mapping = getEntityPersister(entity.getJavaClass().getName(), sessionFactory);
String[] columns;
if (alias != null) {
columns = mapping.toColumns(alias, property);
} else {
columns = mapping.toColumns(property);
}
String root = render(basic, Arrays.asList(columns), sessionFactory, sqlFunction);
Object value = pc.getValue();
if (value != null) {
sqlRestriction = Restrictions.sqlRestriction(root + op + "?", value,
typeResolver.basic(value.getClass().getName()));
} else {
sqlRestriction = Restrictions.sqlRestriction(root + op + "?", value, basic);
}
} else {
throw new InvalidDataAccessResourceUsageException(
"Unsupported function [" + functionName + "] defined in query for property [" + property
+ "] with type [" + pp.getType() + "]");
}
} else {
throw new InvalidDataAccessResourceUsageException("Unsupported function [" + functionName
+ "] defined in query for property [" + property + "] with type [" + pp.getType() + "]");
}
} else {
throw new InvalidDataAccessResourceUsageException(
"Unsupported function defined in query [" + functionName + "]");
}
return sqlRestriction;
}
From source file:org.grails.orm.hibernate.query.AbstractHibernateQuery.java
License:Apache License
org.hibernate.criterion.Criterion getRestrictionForFunctionCall(FunctionCallingCriterion criterion,
PersistentEntity entity) {// w ww . j a v a 2s .c o m
org.hibernate.criterion.Criterion sqlRestriction;
SessionFactory sessionFactory = ((IHibernateTemplate) session.getNativeInterface()).getSessionFactory();
String property = criterion.getProperty();
Criterion datastoreCriterion = criterion.getPropertyCriterion();
PersistentProperty pp = entity.getPropertyByName(property);
if (pp == null)
throw new InvalidDataAccessResourceUsageException(
"Cannot execute function defined in query [" + criterion.getFunctionName()
+ "] on non-existent property [" + property + "] of [" + entity.getJavaClass() + "]");
String functionName = criterion.getFunctionName();
Dialect dialect = getDialect(sessionFactory);
SQLFunction sqlFunction = dialect.getFunctions().get(functionName);
if (sqlFunction != null) {
TypeResolver typeResolver = getTypeResolver(sessionFactory);
BasicType basic = typeResolver.basic(pp.getType().getName());
if (basic != null && datastoreCriterion instanceof PropertyCriterion) {
PropertyCriterion pc = (PropertyCriterion) datastoreCriterion;
final org.hibernate.criterion.Criterion hibernateCriterion = getHibernateCriterionAdapter()
.toHibernateCriterion(this, datastoreCriterion, alias);
if (hibernateCriterion instanceof SimpleExpression) {
SimpleExpression expr = (SimpleExpression) hibernateCriterion;
Object op = ReflectionUtils.getField(opField, expr);
PropertyMapping mapping = getEntityPersister(entity.getJavaClass().getName(), sessionFactory);
String[] columns;
if (alias != null) {
columns = mapping.toColumns(alias, property);
} else {
columns = mapping.toColumns(property);
}
String root = render(basic, Arrays.asList(columns), sessionFactory, sqlFunction);
Object value = pc.getValue();
if (value != null) {
sqlRestriction = Restrictions.sqlRestriction(root + op + "?", value,
typeResolver.basic(value.getClass().getName()));
} else {
sqlRestriction = Restrictions.sqlRestriction(root + op + "?", value, basic);
}
} else {
throw new InvalidDataAccessResourceUsageException(
"Unsupported function [" + functionName + "] defined in query for property [" + property
+ "] with type [" + pp.getType() + "]");
}
} else {
throw new InvalidDataAccessResourceUsageException("Unsupported function [" + functionName
+ "] defined in query for property [" + property + "] with type [" + pp.getType() + "]");
}
} else {
throw new InvalidDataAccessResourceUsageException(
"Unsupported function defined in query [" + functionName + "]");
}
return sqlRestriction;
}