1

我编写了一个休眠条件来过滤和显示具有特定时间输入的记录。

为此,我的数据库有一条记录,其中日期时间组件为 12:30。我已经写了一个 Hour('HH') 版本,我输入 (int 12) 一个小时并且它有效。

对 Minute 使用 (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;
}

}

4

1 回答 1

1

我找到了答案。显然在我的sqldeveloper中,表明该数据字段的格式是“HH:MI”。因此,在 Critera 代码中,我应该使用以下代码:

String str = "TO_CHAR(" + columns[0] + ",'MI') = ?";

于 2013-09-03T06:55:42.437 回答