特定の時間入力を持つレコードをフィルタリングして表示するための Hibernate 基準を作成しました。
このため、私のデータベースには、日時コンポーネントが 12:30 の単一のレコードがあります。これの Hour('HH') バージョンを作成しました。(int 12) を 1 時間入力すると、動作します。
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;
}
}