不区分大小写等于使用Hibernate Criteria

jon*_*077 62 java hibernate

我见过Restrictions.ilike('property','%value%'),但想生成SQL如:lower(property)='value'.有任何想法吗?

我用了:

Restrictions.eq("email", email).ignoreCase()
Run Code Online (Sandbox Code Playgroud)

因为Expression已被弃用.SimpleExpression将在值上调用toLowerCase(),因此不必事先执行此操作.

请参阅: SimpleExpression源

And*_*y A 75

表达式现已弃用.请改为使用限制......

crit(Restrictions.eq("firstName", firstName).ignoreCase());
Run Code Online (Sandbox Code Playgroud)


Joh*_*ner 69

小心使用ilike因为它允许某人输入"test%"之类的东西并匹配.我使用以下内容在一个应用程序中执行不区分大小写:

...
Criteria crit=session.createCriteria(Event.class);
crit.add(Expression.eq("rsvpCode","test1").ignoreCase());
...
Run Code Online (Sandbox Code Playgroud)

  • 现在已弃用,版本4的任何更新? (10认同)
  • 请改用限制(请参阅下面的答案) (7认同)

Sat*_*ani 13

正如Andy的回答所示,这是针对不区分大小写的搜索,但它也适用于Hibernate 4.1版本:

crit(Restrictions.eq("firstName", firstName).ignoreCase());
Run Code Online (Sandbox Code Playgroud)

版本4.1.1及更高版本的Hibernate不支持该ignoreCase()方法Restriction.eq().为此,我们必须使用ilikeMatchMode.

Criteria crit = session.createCriteria(ENTITY.class);
crit.add(Restrictions.ilike('PROPERTY NAME', 'VALUE', MatchMode.ANYWHERE));
Run Code Online (Sandbox Code Playgroud)

例如,对于具有id,name,surname属性的USER实体,基于名称的不区分大小写的搜索将是:

Criteria crit = session.createCriteria(USER.class);
crit.add(Restrictions.ilike('name', 'Satyam', MatchMode.ANYWHERE));
Run Code Online (Sandbox Code Playgroud)

这将返回所有结果,不区分大小写.

  • 为什么他们不再支持它的任何理由? (2认同)

Uri*_*Uri 7

我不是很确定,但是当你使用Restriction.eq时,你获得了一个SimpleExpression对象,并且该对象支持一个我从未尝试使用的ignoreCase()操作,但听起来它可能会有所不同.

感谢Hibernate没有记录这个方法实际上做了什么.