Non c'è ilike
funzionalità equivalenti a HQL. Come Konstantin ha già indicato nel suo suggestion, la scelta migliore è tune the database connection e impostare collation su TERRITORY_BASED:SECONDARY
, come spiegato in questa JIRA: DERBY-1748: Global case insensitive setting.
Prendere in considerazione che tutte le uguaglianze (=
) e like
s non fanno distinzione tra maiuscole e minuscole. Questo potrebbe andare un po 'troppo lontano e non essere adatto alla tua situazione particolare.
Un altro modo di affrontare questo sarebbe creare indici basati su funzioni (se Derby li supporta, ovviamente) e mettere a punto l'HQL per combinare like
e lower
in questo modo.
Query q = session.createQuery("... WHERE lower(entity.field) like ?)");
q.setString(0, '%' + variable.toLowerCase() + '%');
Se Derby non supporta di (penso che non lo fa) FBI, si potrebbe anche creare colonne di trigger-riempita con i valori più bassi e indicizzarli.
UPDATE Sembra essere possibile definire derivato/colonne generate automaticamente, come spiegato in questo altro JIRA: JIRA-481: implement SQL generated columns.
fonte
2011-11-02 09:41:29
Stai dicendo ** come ** non funzionerà HQL nel database Derby? – ManuPK
come * funzionerà *, ma distingue maiuscole e minuscole – gotch4