2013-05-28 36 views
1

美好的一天傢伙!我需要在Java中構建動態查詢(使用可選的過濾參數和條件)。我決定採用Criteria API,因爲它似乎是最靈活的方法。Java Criteria API喜歡的條件

我試圖達到條件(Mysql的透視)的一個例子:

WHERE idClient = X AND (idChannel = 1 OR idChannel = 2 OR idChannel = 25) AND filter LIKE '%test%' 

參數「標準」是謂詞與idChannel過濾器列表,創建如下:

//Filter by channel 
    for (Channel channel : channels){ 
     Predicate channelFilter = qb.equal(address.get(AddressBlocked_.idChannel), channel); 
     criteria.add(channelFilter); 
    } 

我使用標準的API(Java透視圖)寫的條件:

Predicate predicate = qb.and(

      //Client filter 
      qb.equal(address.get(AddressBlocked_.idClient), idClient), 

      //Channel filter 
      qb.or(
       criteria.toArray(new Predicate[criteria.size()]) 
     ), 

      //Address filter 
      qb.like(address.get(AddressBlocked_.address), "%"+search+"%") 
    ); 

瓦每當地址過濾器「搜索」變量具有任何值時,該列表將返回空值,否則按通道和客戶端進行的過濾工作將會完好。

我還沒有能夠在我的CriteriaQuery中實現LIKE篩選選項。任何其他方法我應該使用或提示?先謝謝了。

+0

什麼的這段代碼做:'address.get(AddressBlocked_.address)'? – jtahlborn

+0

如果我沒有弄錯,它是數據庫字段的元模型表示。 –

回答

1

也許嘗試使用星號爲您的通配符如下所示:

http://docs.oracle.com/javaee/6/tutorial/doc/gjivm.html

+0

嘗試使用通配符*代替%作爲「*」+搜索沒有不同的結果。仍然沒有收到任何數據。 –

+0

該錯誤是設置「搜索」變量。它包括「」字符和過濾器從未工作過。當我使用它時,我成功測試的語法是「%」+ search +「%」 –