Konuyu kısaca özet geçecek olursam, SQL de LIKE ifadesi daha çok sorgularda arama işlevselliği için kullanılır. Örneğin adı Abdülrezak, Abdülmuttalip olan birçok üyemiz olduğunu varsayalım. Biz ise adı Abdül ile başlayan tüm üyeleri almak istiyoruz. Bunun için kabaca sorgumuzu;
FROM uyeler WHERE uyeAdi LIKE 'Abdül%'
şeklinde ifade ederiz. Böylece ueyeler tablosunda, adı Abdül ile başlayan tüm kullanıcıları elde ederiz.
Şimdi bu yapıyı JPA 2 (JPQL) sorgularında kullanmak istediğimizde, aslında mantık olarak aynı şeyi ifade etmek gerekiyor, tabi ufak farklılıklarla..
Bu yazıyı yazmamın amacına gelecek olursak, geçenlerde PrimeFaces’da bulunan autocomplete bileşenini kullanma ihtiyacımdı.
Bileşenin sağladığı özellikleri kullanarak minimum 3 harf girilerek veritabanında bulunan ve bu 3 harf ile başlayan sorguları almam gerekti. Üstte bahsettiğim SQL ifadesini uygulayarak, işin içinden çıkmayı planlıyordum ki JPA 2 nin sorgu dili (JPQL) ile biraz cebelleşmem gerekti. Çünkü direk ‘%’ karakterini sorgu içinde yemedi kendisi. % karakterini tanımadığını belirtti. CriteriaAPI ile kolayca çözülüyor gerçi.
Neyse, konuya dönecek olursak LIKE ifadesini kullanan JPQL sorgumuzu şu şekilde yazarsak, problem kalmıyor.
Query q = em.createQuery("SELECT u FROM Uyeler u WHERE u.uyeAdi LIKE :query"); q.setParameter("query", query+ '%'); return q.getResultList();
Üstteki kodu kapsayan method, query adında bir String değişken alıyor ki bu yukarıda bahsettiğim ilk 3 harf mevzusunu temsil ediyor. Böylece JPQLde de LIKE ifadesinin direk sorgu içerisinde değil de, setParameter methodu içerisinde bind edilmesi gerektiğini hem ben hem de siz öğrenmiş olduk =)
Umarım ihtiyacı olanlara faydası olur.
RSS Feed
03 Nisan 2011
fatih
Konu
Etiketler: 