在ilike()的内部工作中可以提供一些帮助,因为我经历了hibernate api但是没有弄清楚。例如,我正在搜索一个名称,即vijay,我已经在搜索框中输入了VIJAY(在首都)。 1.它实际上比较两者? 2. hibernate是否使用任何函数将VIJAY转换为小写,然后进行比较?
答案 0 :(得分:2)
这取决于所使用的数据库方言。
刚检查了代码,它来自(LikeExpression)
if ( dialect.supportsCaseInsensitiveLike() ) {
return column +" " + dialect.getCaseInsensitiveLike() + " ?" + escape;
}
else {
return dialect.getLowercaseFunction() + '(' + column + ')' + " like ?" + escape;
}
因此,方言负责实际的SQL表达式。例如,在PostgreSQL getCaseInsensitiveLike()
上返回ilike
,而在Oracle方言中supportsCaseInsensitiveLike()
返回false
,因此表达式生成为
dialect.getLowercaseFunction() + '(' + column + ')' + " like ?" + escape;
是
lower(column) like ?