1

Java で動的クエリ (オプションのフィルタリング パラメーターと条件を使用) を作成する必要があります。Criteria API が最も柔軟なアプローチに思えたので、Criteria API を使用することにしました。

私が達成しようとしている条件の例(Mysqlの観点):

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

パラメータ "criteria" は、次のように作成された idChannel フィルタを使用した述語のリストです。

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

Criteria 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+"%") 
);

アドレス フィルターの「検索」変数に値がある場合は常に、リストは null を返します。それ以外の場合は、チャネルとクライアントによるフィルター処理が完全に機能します。

CriteriaQuery に LIKE フィルタリング オプションを実装できませんでした。私が使用する必要がある他のアプローチまたはヒントはありますか?

4

1 に答える 1

1

次のように、ワイルドカード文字にアスタリスクを使用してみてください。

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

于 2013-05-28T15:11:53.823 に答える