我正在使用hibernate。我想做不区分大小写的搜索。如下。
criteria.add(Restrictions.eq("id", id).ignoreCase());
但是如何在下面的情况下做同样的事情?
criteria.add(Restrictions.in("name", names))
; // namesis列表名称。
这里如何搜索不区分大小写的名称?
请帮忙。
谢谢!
答案 0 :(得分:4)
您必须自己编写一个新表达式(CaseInsensitiveInExpression
)。使用org.hibernate.criterion.InExpression
的代码作为起点,并对其进行转换,以便生成的SQL子句类似于
lower(theColumnName) in (?, ?, ?)
传递给查询的值是通过toLowerCase()
传递的原始值(就像org.hibernate.criterion.ILikeExpression
那样)
如果您想使数据库无关,请使用dialect.getLowercaseFunction()
来获取数据库函数,该函数将字符串转换为小写,如ILikeExpression
那样。