I ran across a minor code smell in Hibernate when dealing with
case-insensitive like. The offending class is ILikeExpression:
if ( dialect instanceof PostgreSQLDialect ) {
return columns[0] + " ilike ?";
}
else {
return dialect.getLowercaseFunction() + '(' + columns[0] + ") like
?";
}
This might be better and more OO:
String ilikeOperator = dialect.getILikeOperator();
if ( ilikeOperator != null ) {
return columns[0] + " " + ilikeOperator + " ?";
}
else if ( dialect.areStringComparisonsCaseInsensitive() ) {
return columns[0] + " like ?";
}
else {
return dialect.getLowercaseFunction() + '(' + columns[0] + ") like
?";
}
PostgresSQLDialect.getILikeOperator() would return "ilike". All other
dialects would return null.