我编写了一个 Hibernate 标准来过滤和显示具有特定时间输入的记录。
为此,我的数据库有一条日期时间部分为 12:30 的记录。我已经写了一个 Hour('HH') 版本,我输入 (int 12) 一小时并且它有效。
对分钟使用条件 (int 30) 不会返回数据库中的记录。事实上,无论我输入什么,它都不会返回。我下面写的标准有问题吗?
public class MinEqCriteria implements Criterion {
private final String propertyName;
private final int min;
public MinEqCriteria(String propertyName, int min) {
this.propertyName = propertyName;
this.min = min;
}
@Override
public String toSqlString(Criteria criteria, CriteriaQuery criteriaQuery)
throws HibernateException {
String[] columns = criteriaQuery.findColumns(propertyName, criteria);
if (columns.length!=1) {
throw new HibernateException("minEq may only be used with single-column properties");
}
String str = "TO_CHAR(" + columns[0] + ",'mm') = ?";
return str;
}
@Override
public TypedValue[] getTypedValues(Criteria criteria, CriteriaQuery criteriaQuery) throws HibernateException {
return new TypedValue[] {new TypedValue(IntegerType.INSTANCE, min, EntityMode.POJO)};
}
@Override
public String toString() {
return "min(" + propertyName + ") = " + min;
}
}
最佳答案
我已经找到答案了。显然在我的sqldeveloper中,表明该数据字段的格式是“HH:MI”。因此,在 Critera 代码中,我应该使用以下代码:
String str = "TO_CHAR("+ columns[0] + ",'MI') = ?";
关于java - 仅比较日期数据类型的 'Minute' 部分的 Hibernate Criteria,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18585373/