Nie ma ilike
równoważne funkcje w HQL. Jak Konstantin już wskazał w swoim suggestion, najlepszym wyborem jest tune the database connection i ustawić collation na TERRITORY_BASED:SECONDARY
, jak wyjaśniono w tym JIRA: DERBY-1748: Global case insensitive setting.
Należy wziąć pod uwagę, że w przypadku wszystkich równości (=
) i like
s nie będzie uwzględniana wielkość liter. To może pójść nieco zbyt daleko i nie nadawać się do konkretnej sytuacji.
Innym sposobem rozwiązania tego problemu byłoby utworzenie indeksów opartych na funkcjach (jeśli Derby je obsługuje, oczywiście) i dostrojenie swojego HQL w celu połączenia w ten sposób like
i lower
.
Query q = session.createQuery("... WHERE lower(entity.field) like ?)");
q.setString(0, '%' + variable.toLowerCase() + '%');
Jeśli Derby nie obsługuje FBI (myślę, że tak nie jest), można też tworzyć kolumny progowych wypełnione niższych wartościach i indeks im.
UPDATE To wydaje się być możliwe określenie pochodzące/generowanych automatycznie kolumn, jak wyjaśniono w tej drugiej JIRA: JIRA-481: implement SQL generated columns.
Mówisz ** jak ** nie działa HQL w bazie danych Derby? – ManuPK
jak * działa *, ale rozróżniana jest wielkość liter – gotch4