14

like()部分的なキーワードでHibernate の制限基準を使用して、PostgreSQL データベースにクエリを実行しようとしています。

Criterion c1 = Restrictions.like("stateName", "Virg*");
cri.add(c1);

return cri.list();

何もRestrictions.like("stateName", "Virginia");返さず、正しいレコードを返します。Hibernate で部分的like制限を使用するにはどうすればよいですか?

編集:
次のようなことを行うことで機能しました:

public static List<Object> createQueryStringByRegex(Criteria cri, Parameters p) {
    String value = (String) p.value;
    if (value.contains("*")) {
        value = value.replace("*", "%");
    } else {
        value += "%";
    }
    // System.out.println("Value: "+value);
    Criterion c1 = Restrictions.ilike(p.property, value);
    cri.add(c1);

    return cri.list();

}
4

3 に答える 3

59

列挙型 MatchModeを使用して、それを支援します。

Criterion c1 = Restrictions.like("stateName", "Virg", MatchMode.START);

* などの特殊文字は使用しないでください。大文字と小文字を区別しない like が必要な場合は、ilikeを使用します。

于 2013-01-10T18:20:06.507 に答える
11

制限にはパーセント記号を使用する必要があります。

Criterion c1 = Restrictions.like("stateName", "Virg%");
于 2013-01-10T18:17:51.940 に答える