Olá a todos ,
Estou precisando implementar uma extensão de CRITERIA do hibernate para suportar operações aritméticas em campos de banco de dados
ex :
“where (column + (column * 0.2)) > select count(id) …”
Comecei implementando isso e enrosquei na parte de suporte a subselect :
package br.gov.sp.defensoria.common.hibernate.criterion;
import org.hibernate.Criteria;
import org.hibernate.EntityMode;
import org.hibernate.HibernateException;
import org.hibernate.criterion.CriteriaQuery;
import org.hibernate.criterion.Criterion;
import org.hibernate.engine.TypedValue;
import org.hibernate.type.StandardBasicTypes;
@SuppressWarnings("serial")
public class OperationExpression implements Criterion {
private final String propertyName1;
private final String propertyName2;
private final Object value1;
private final Object value2;
public OperationExpression(String propertyName1, String propertyName2,Object value1,Object value2) {
this.propertyName1 = propertyName1;
this.propertyName2 = propertyName2;
this.value1 = value1;
this.value2 = value2;
}
public String toSqlString(Criteria criteria, CriteriaQuery criteriaQuery)
throws HibernateException {
//value2 é uma instancia de DetachedCriteria
return " ( " + criteriaQuery.getColumn(criteria, propertyName1) + " + ( " +
criteriaQuery.getColumn(criteria, propertyName2) +" * "+ value1+ " )) > " +
//Como eu pego o sql que será gerado por esse objeto DetachedCriteria
value2);
}
public TypedValue[] getTypedValues(Criteria criteria,
CriteriaQuery criteriaQuery) throws HibernateException {
return new TypedValue[] { new TypedValue(StandardBasicTypes.DOUBLE,value1,EntityMode.POJO)};
}
public String toString() {
return " ( " + propertyName1 + " + ( " propertyName2 +" * "+ value1.toString()+ " )) > " + value2.toString());
}
}
Quando tento rodar ele impleme o toString do objeto em vez do subselect que passei
(property + ( property* 0.2 )) > DetachedCriteria@fdsi9fd77 (toString() of detached criteria)
Sei que a pergunta é meio avançada mas como faria pra ele imprimir o sql certo em vez do toString() do objeto ???