2011-11-02 13 views
12

Hibernate + MySQL için bir proje yazdım. Şimdi onu Derby'ye gönderiyorum (bir dizi nedenden ötürü).HQL Restrictions.ilike için eşdeğerdir (büyük küçük harf duyarlılığı için)?

Şimdi, Derby'nin sorgularda LIKE kullanırken büyük/küçük harfe duyarlı olduğunu keşfettim. Bu, Kriterler sorgularında Restrictions.ilike(...) kullanılarak çözülebilir ... ancak bunu kullanan birçok karmaşık HQL sorgusu var. HQL'de ilike benzeri bir işlevselliğe sahip olmanın bir yolu var mı?

+0

** ** gibi ** derby veritabanında HQL çalışmayacak mı? – ManuPK

+1

gibi * will * çalışacak, ancak büyük/küçük harfe duyarlı – gotch4

cevap

15

HQL hiçbir ilike eşdeğer işlevselliği yoktur. Konstantin'in zaten suggestion'da işaret ettiği gibi, en iyi seçiminiz tune the database connection ve için JIRA: DERBY-1748: Global case insensitive setting'da açıklandığı şekilde ayarlanmıştır. Tüm eşitliklerin (=) ve like s nin büyük/küçük harf duyarlı olamayacağını dikkate alın. Bu biraz fazla ileri gidebilir ve özel durumunuza uygun olmayabilir.

Bunu ele almanın başka bir yolu, işlev tabanlı dizinler oluşturmak (Derby onları destekliyorsa) ve HQL'nizi like ve lower'u bu şekilde birleştirmek için ayarlar.

Query q = session.createQuery("... WHERE lower(entity.field) like ?)"); 
q.setString(0, '%' + variable.toLowerCase() + '%'); 

Derby FBI (ı değil mi düşünüyorum), ayrıca düşük değerlere ve endeks onları birlikte tetik dolu sütunlar oluşturabilir desteklemiyorsa

.

UPDATE Diğer JIRA: JIRA-481: implement SQL generated columns'da açıklandığı gibi türetilmiş/otomatik olarak oluşturulmuş sütunları tanımlamak mümkün görünmektedir.

+0

ama gotch4 onun HQL sorgularını tutmayı tercih ediyor –

+0

Bağlantı harmanlamasını değiştirmek istemiyorsa başka seçeneği yok. Ve anladım ki onları kriter sorgularına dönüştürmek istemiyor. –

+1

Onu anlıyorum - bir refactoring ve test –

İlgili konular