我遇到了同样的问题,这是我做的:
首先,我创建了自己的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),并且适用于具有to_char函数的postgresql。您可能需要稍微调整一下才能使用数据库引擎。



