来自Hibernate Criteria API的限制

时间:2013-01-10 18:12:11

标签: hibernate criteria

我试图使用Hibernate的限制标准like()和部分关键字来查询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();

}

3 个答案:

答案 0 :(得分:56)

使用枚举MatchMode来帮助您:

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

不要使用任何特殊字符,例如*。如果您想要不区分大小写,请使用ilike

答案 1 :(得分:11)

限制应使用百分号。

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

答案 2 :(得分:0)

##Use MatchMode.ANYWHERE##
DetachedCriteria crit = DetachedCriteria.forClass(MyClass.class);
 crit.add(Restrictions.like("prop1", "matchValue", MatchMode.ANYWHERE));
 return getHibernateTemplate().findByCriteria(crit);