spring - QueryDSL dynamic predicates -
i need querydsl querying. i'm using library spring data jpa. service class:
@service("tblactivityservice") public class tblactivityservice implements abstractservice<tblactivity> {  @resource private tblactivityrepository tblactivityrepository;  @override public list<tblactivity> findall(predicate predicate) {     return (list<tblactivity>) tblactivityrepository.findall(predicate); } } i have dynamic list of filters:
@entity @table(name = "sys_filters") public class sysfilter implements serializable { private static final long serialversionuid = 1l;  @id @generatedvalue(strategy = generationtype.identity) @basic(optional = false) @column(name = "filter_id") private integer filterid;  @joincolumn(name = "user_id", referencedcolumnname = "user_id") @manytoone(fetch = fetchtype.eager) private sysuser userid;  @size(max = 45) @column(name = "table_name") private string tablename;  @size(max = 45) @column(name = "column_name") private string columnname;  @size(max = 45) @column(name = "condition") private string condition;  @size(max = 100) @column(name = "value") private string value;   // getters & setters  } i have column name (e.g. title) have condition (e.g. ==, !=, >= etc.) - can store symbols or words (equals etc.) , have value.
the question "how dynamically generate predicate service?" table has 25 fields.
predicate looks that:
public booleanexpression buildfilteredresult(list<sysfilter> filters) {     //todo it!     return qtblactivity.tblactivity.title.eq("value");  // need dynamically each filter in list } the problem how invoke columnname string value. have suggestions?
it might easier use mapping filter conditions operators
map<string, operator> operators = immutablemap.of(   "==", ops.eq, "!=", ops.ne, ">", ops.gt, "<", ops.lt,   ">=", ops.goe, "<=", ops.loe);  expressions.predicate(operators.get(condition),    stringpath, expressions.constant(filtervalue)); also make sure combine predicates properly
predicates.and(...) returns new predicate , leaves predicates untouched.  
maybe booleanbuilder after?
Comments
Post a Comment