1

ID をクエリし、並べ替え、ページ付け、およびフィルタリング オプションを使用してテーブルに表示したいと考えています。すべて問題ありませんが、NOT 条件を導入する方法が見つかりませんでした。

コードでは、T 変数は org.picketlink.idm.model.IdentityType であり、identityClass は実際のクラスです。

IdentityQueryBuilder queryBuilder = getIdentityManager().getQueryBuilder();

IdentityQuery<T> query = queryBuilder.createIdentityQuery(identityClass);
List<Condition> condizioni = new ArrayList<>();
conditions.addAll(conditionFromFilterClausole(queryBuilder, ffc));
Condition c[] = condizioni.toArray(new Condition[condizioni.size()]);
query.where( c);
...

メソッド conditionFromFilterClausole で、ID クエリの条件でオブジェクト (FilterClause) を変換します。FilterClause.field は列名、FilterClause.operator は条件のタイプ、FilterClause.value は使用する値です。

for(FilterClause f : lf){
    QueryParameter qp = new org.picketlink.idm.query.AttributeParameter(f.getField());
        switch(f.operator){
            case EQUAL:
                conditions.add(qb.equal(qp, f.value));
                break;
            case CONTAINS :
                conditions.add(qb.like(qp, (String) f.value));
                break;
            case ENDSWITH : 
                ???
            case STARTSWITH : 
                ???
                break;
            case GREATEREQUAL : 
                conditions.add( qb.greaterThanOrEqualTo(qp, (String) f.value));
                break;
            case GREATERTHEN : 
                conditions.add(qb.greaterThan(qp, (String) f.value));
                break;
            case LESSEQUAL: 
                conditions.add( qb.lessThanOrEqualTo(qp, (String) f.value));
                break;
            case LESSTHEN: 
                conditions.add(qb.lessThan(qp, (String) f.value));
                break;
            case IN: 
                conditions.add(qb.in(qp, f.value));
                break;
            case NOTIN: 
            case NOTCONTAINS:
            case NOTEQUAL:
                ???
                break;
        }

「STARTSWITH/ENDSWITH」の条件を作成する方法と、他のすべての条件を NOT で作成する方法がありません。QueryBuilder にはこれらのメソッドがありません。

4

0 に答える 0