Как ограничение из Hibernate Criteria API

Я пытаюсь выполнить запрос к базе данных PostgreSQL, используя критерий ограничения Hibernate like() с частичным ключевым словом:

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();

}

Ответ 1

Используйте enum MatchMode, чтобы помочь вам с этим:

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

Не используйте специальные символы, такие как *. И если вы хотите, чтобы без учета регистра, как, используйте ilike.

Ответ 2

Ограничение должно использовать символ процента.

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

Ответ 3

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