1

特定の時間入力を持つレコードをフィルタリングして表示するための 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;
}

}

4

1 に答える 1

1

私は答えを見つけました。どうやら私のsqldeveloperでは、そのデータフィールドの形式が「HH:MI」であることが示されています。したがって、Critera コードでは、代わりに次のコードを使用する必要がありました。

文字列 str = "TO_CHAR(" + 列[0] + ",'MI') = ?";

于 2013-09-03T06:55:42.437 に答える