我见过Restrictions.ilike('property','%value%'),但想生成SQL如:lower(property)='value'.有任何想法吗?
我用了:
Restrictions.eq("email", email).ignoreCase()
因为Expression已被弃用.SimpleExpression将在值上调用toLowerCase(),因此不必事先执行此操作.
请参阅: SimpleExpression源
表达式现已弃用.请改为使用限制......
crit(Restrictions.eq("firstName", firstName).ignoreCase());
小心使用ilike因为它允许某人输入"test%"之类的东西并匹配.我使用以下内容在一个应用程序中执行不区分大小写:
... Criteria crit=session.createCriteria(Event.class); crit.add(Expression.eq("rsvpCode","test1").ignoreCase()); ...
正如Andy的回答所示,这是针对不区分大小写的搜索,但它也适用于Hibernate 4.1版本:
crit(Restrictions.eq("firstName", firstName).ignoreCase());
版本4.1.1及更高版本的Hibernate不支持该ignoreCase()
方法Restriction.eq()
.为此,我们必须使用ilike
有MatchMode
.
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));
这将返回所有结果,不区分大小写.
我不是很确定,但是当你使用Restriction.eq时,你获得了一个SimpleExpression对象,并且该对象支持一个我从未尝试使用的ignoreCase()操作,但听起来它可能会有所不同.
感谢Hibernate没有记录这个方法实际上做了什么.