美好的一天傢伙!我需要在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篩選選項。任何其他方法我應該使用或提示?先謝謝了。
什麼的這段代碼做:'address.get(AddressBlocked_.address)'? – jtahlborn
如果我沒有弄錯,它是數據庫字段的元模型表示。 –