web-dev-qa-db-fra.com

LIKE restriction de l'API Hibernate Criteria

J'essaie d'interroger la base de données PostgreSQL en utilisant le critère de restriction d'Hibernate like() avec un mot clé partiel:

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

return cri.list();

Il ne retourne rien mais Restrictions.like("stateName", "Virginia"); retourne l'enregistrement correct. Comment utiliser des restrictions partielles comme dans Hibernate?

ÉDITER:
Je l'ai fait fonctionner en faisant quelque chose comme ceci:

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

}
13
Biggy_java2

Utilisez l'énumération MatchMode pour vous aider:

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

N'utilisez aucun caractère spécial, comme *. Et si vous voulez un style insensible à la casse, utilisez ilike .

56
Juliano Alves

La restriction doit utiliser le symbole de pourcentage.

Criterion c1 = Restrictions.like("stateName", "Virg%");
11
Manuel Quinones
##Use MatchMode.ANYWHERE##
DetachedCriteria crit = DetachedCriteria.forClass(MyClass.class);
 crit.add(Restrictions.like("prop1", "matchValue", MatchMode.ANYWHERE));
 return getHibernateTemplate().findByCriteria(crit);

c'est équivalent à:

select * 
    from Table_Name 
    where prop1 like "%matchValue%";
1
Avinash Khadsan