如何使用条件在hibernate中进行不区分大小写的搜索?

时间:2011-12-26 13:05:05

标签: hibernate

我正在使用hibernate。我想做不区分大小写的搜索。如下。

criteria.add(Restrictions.eq("id", id).ignoreCase());

但是如何在下面的情况下做同样的事情?

criteria.add(Restrictions.in("name", names)); // namesis列表名称。

这里如何搜索不区分大小写的名称?

请帮忙。

谢谢!

1 个答案:

答案 0 :(得分:4)

您必须自己编写一个新表达式(CaseInsensitiveInExpression)。使用org.hibernate.criterion.InExpression的代码作为起点,并对其进行转换,以便生成的SQL子句类似于

lower(theColumnName) in (?, ?, ?)

传递给查询的值是通过toLowerCase()传递的原始值(就像org.hibernate.criterion.ILikeExpression那样)

如果您想使数据库无关,请使用dialect.getLowercaseFunction()来获取数据库函数,该函数将字符串转换为小写,如ILikeExpression那样。