У меня была та же проблема, и вот что я сделал:
Сначала я создал свою собственную реализацию Criterion:
public class DateLikeExpression implements Criterion {
private static final long serialVersionUID = 1L;
private String propertyName;
private String value;
public DateLikeExpression(String propertyName, String value) {
this.propertyName = propertyName;
this.value = value;
}
public String toSqlString(Criteria criteria, CriteriaQuery criteriaQuery) throws HibernateException {
String[] columns = criteriaQuery.getColumnsUsingProjection(criteria, propertyName);
if (columns.length != 1) {
throw new HibernateException("Like may only be used with single-column properties");
}
return "to_char(" + columns[0] + ", 'DD/MM/YYYY HH24:MI') like ?";
}
public TypedValue[] getTypedValues(Criteria criteria, CriteriaQuery criteriaQuery) throws HibernateException {
return new TypedValue[] { new TypedValue(new org.hibernate.type.StringType(),
MatchMode.START.toMatchString(value.toLowerCase()), EntityMode.POJO) };
}
}
Затем я просто использую ее, когда собираю критерии:
criteria.add(new DateLikeExpression("dateColumnName", "26/11%"));
И это все.Обратите внимание, что эта реализация зависит от локали (в данном случае pt_BR) и работает для postgresql, который имеет функцию to_char.Возможно, вам придется немного его настроить, чтобы работать с ядром базы данных.