2016-04-13 9 views
1

İlkbahar projemde jquery datatable için sayfalama ve sıralama havuzu kullanıyorum. Şimdi ŞimdiSayfalama ve sıralama deposu kullanarak birden fazla parametre ile nasıl arama yapılır?

@Query(value = "Select p from ProfileBaseInfo p where p.fullName = :fullName or p.firstName = :firstName or p.lastName = :lastName") 
Page<ProfileBaseInfo> search(@Param("fullName") String fullName,@Param("firstName") String firstName,@Param("lastName") String lastName,Pageable pageable); 

gibi ben farklı kombinasyonlar (yani. Ve/veya) ile ilaveten 5 daha fazla parametre aramanıza gerek itibariyle üç parametreleri ile arama çalıştı. Aranan parametrelere dayanarak bir dynamic query oluşturdum. (i) Bir parametre varsa, tabloya katılır ve where koşulunu ekleyeceğim. Dinamik olarak oluşturulmuş sorguyu @Query içine nasıl getirebilirim veya bunu farklı bir şekilde ele almalı mıyım? Şimdi istediğim, "SELECT * FROM profile where name=? and fullName=? and title=? and city=? and state=? and country=?" in ***@Query*** Ek Açıklama gibi bir kriter oluşturmam gerekiyor.

Başka bir yöntem olup olmadığını bilmek istiyorum çünkü bir tablodaki sütun sayısı yüksek olabilir.

cevap

0

Arama yönteminizi uygulayarak bir Spring bean yaratmanız gerektiğini düşünüyorum (Spring Data). @Bu Fasulye, DB (EntityManager veya benzeri) ile konuşmak ve ihtiyacınız olan her şeyi yazmak için biraz fasulye.

Ben Yani

CriteriaBuilder cb = entityManager.getCriteriaBuilder(); 
CriteriaQuery<ProfileBaseInfo> cq = cb.createQuery(ProfileBaseInfo.class); 
Root<ProfileBaseInfo> from = cq.from(ProfileBaseInfo.class); 
... 
List<Predicate> predicates = Lists.newArrayList(); 
... 
if (param.getFullName() != null) { 
    predicates.add(cb.like(cb.lower(ProfileBaseInfo_.fullName)), param.getFullName().toLowerCase() + "%")) 
} 
... 
cb.and(predicates.toArray(new Predicate[predicates.size()])); 

gibi

class Parameters { 
    String firstName, 
    String fullName; 
    ... 
    Object paramN; 

    <<getters-setters ?>> 
} 

gibi, tüm parametreler için sarıcı nesnesinin çeşit kullanmak ve parametrelerine göre sorgusunu oluşturmak için CriteriaQuery kullanılacağını öneriyoruz ihtiyaçlara göre parametreler listesini genişletebilir ve dizelerle çalışmaya gerek yoktur.

İlgili konular