yos*_*ane 3 java hibernate criteria date sql-like
是否可以执行检查Date实例的字符串表示形式的请求.例如
Restrictions.like("dateField", "%12%")
Run Code Online (Sandbox Code Playgroud)
检索日期中包含字符串12或12月或12年的日期,其中"dateField"是java.util.Date的实例谢谢
我有同样的问题,这就是我做的:
首先,我创建了自己的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) };
}
}
Run Code Online (Sandbox Code Playgroud)
然后,当我将Criteria放在一起时,我只是使用它:
criteria.add(new DateLikeExpression("dateColumnName", "26/11%"));
Run Code Online (Sandbox Code Playgroud)
这就是它.注意,此实现是区域设置相关的(pt_BR表示在这种情况下),并适用于PostgreSQL的,其中有TO_CHAR函数.您可能需要稍微调整一下才能使用数据库引擎.
| 归档时间: |
|
| 查看次数: |
9014 次 |
| 最近记录: |