一尘不染

Hibernate Criteria API中的LIKE限制

hibernate

我正在尝试使用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();

}

阅读 230

收藏
2020-06-20

共1个答案

一尘不染

使用枚举MatchMode可以帮助您:

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

请勿使用任何特殊字符,例如*。而且,如果您希望使用不区分大小写的like,请使用ilike

2020-06-20