不区分大小写等于使用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)查询。 所以这个工作。