Как ограничение из 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);