不区分大小写等于使用Hibernate标准
我已经看到了Restrictions.ilike('property','%value%'),但是想生成如下所示的SQL:lower(property)='value'。 有任何想法吗?
我用了:
Restrictions.eq("email", email).ignoreCase()
因为expression式已被弃用。 SimpleExpression将调用toLowerCase()的值,所以没有必要事先做。
请参阅: SimpleExpression源代码
小心使用ilike,因为它可以让某人input诸如“test%”之类的东西并匹配。 我使用以下在一个应用程序中执行不区分大小写的操作:
... Criteria crit=session.createCriteria(Event.class); crit.add(Expression.eq("rsvpCode","test1").ignoreCase()); ...
expression式现在已被弃用。 改用限制…
crit(Restrictions.eq("firstName", firstName).ignoreCase());
正如Andy的回答所暗示的那样,这对于大小写不敏感的search,但是它也可以通过Hibernate 4.1版来实现:
crit(Restrictions.eq("firstName", firstName).ignoreCase());
Hibernate的4.1.1和更高版本不支持Restriction.eq()
上的ignoreCase()
方法。 为此,我们必须用MatchMode
使用ilike
。
Criteria crit = session.createCriteria(ENTITY.class); crit.add(Restrictions.ilike('PROPERTY NAME', 'VALUE', MatchMode.ANYWHERE));
例如,对于具有id,name,surname属性的USER实体,基于名称的不区分大小写的search将是:
Criteria crit = session.createCriteria(USER.class); crit.add(Restrictions.ilike('name', 'Satyam', MatchMode.ANYWHERE));
这将返回所有结果,不区分大小写。
我不是很确定,但是当您使用Restriction.eq时,您将获得一个SimpleExpression对象,并且该对象支持一个我从未尝试过使用的ignoreCase()操作,但听起来像是可以改变它。
对Hibernate的荣誉没有logging这个方法实际上做了什么。
crit(Restrictions.eq("firstName", firstName).ignoreCase());
作品。
这确实返回一个SimpleExpression Object
但它会生成lower(firstname)
查询。 所以这个工作。