web-dev-qa-db-ja.com

Hibernate Criteria APIからのLIKE制限

Hibernateの制限基準 like() と部分的なキーワードを使用して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();

}
_
13
Biggy_java2

Enum MatchMode を使用して、それを支援します。

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

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

56
Juliano Alves

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

Criterion c1 = Restrictions.like("stateName", "Virg%");
11
Manuel Quinones
##Use MatchMode.ANYWHERE##
DetachedCriteria crit = DetachedCriteria.forClass(MyClass.class);
 crit.add(Restrictions.like("prop1", "matchValue", MatchMode.ANYWHERE));
 return getHibernateTemplate().findByCriteria(crit);

これは次と同等です。

select * 
    from Table_Name 
    where prop1 like "%matchValue%";
1
Avinash Khadsan