是否可以执行检查 Date 实例的字符串表示的请求。例如
Restrictions.like("dateField", "%12%")
检索日期,其中“dateField”是 java.util.Date 的实例 谢谢
最佳答案
我遇到了同样的问题,这是我所做的:
首先,我创建了自己的标准实现:
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。您可能需要稍微调整一下才能使用您的数据库引擎。
关于java - 在 Hibernate Criteria 中将日期转换为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7765559/