14

我正在尝试使用like()带有部分关键字的 Hibernate 的限制条件来查询 PostgreSQL 数据库:

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

return cri.list();

它不返回任何内容,而是Restrictions.like("stateName", "Virginia");返回正确的记录。如何在 Hibernate 中使用部分类似限制?

编辑:
通过执行以下操作使其工作:

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 回答
1
##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%";
于 2019-07-05T10:15:54.217 回答