我想查询我的身份并将其显示在带有排序、分页和过滤选项的表格中。没关系,但我还没有找到引入 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 中,我将一些对象(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 没有这些方法。