当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《不区分大小写等于使用HibernateCriteria》经验,为你挑选了4个好方法。

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

我用了:

Restrictions.eq("email", email).ignoreCase()

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

请参阅: SimpleExpression源



1> Andy A..:

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

crit(Restrictions.eq("firstName", firstName).ignoreCase());



2> John Wagenle..:

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

...
Criteria crit=session.createCriteria(Event.class);
crit.add(Expression.eq("rsvpCode","test1").ignoreCase());
...


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

3> Satyam Koyan..:

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

crit(Restrictions.eq("firstName", firstName).ignoreCase());

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

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

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

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

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


为什么他们不再支持它的任何理由?

4> Uri..:

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

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

推荐阅读
依然-狠幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有