package net.eusashead.bjugquerydsl.data.predicate; import net.eusashead.bjugquerydsl.controller.SkuSearchRequest; import net.eusashead.bjugquerydsl.data.entity.QStockKeepingUnit; import net.eusashead.bjugquerydsl.data.entity.StockKeepingUnit; import com.mysema.query.BooleanBuilder; import com.mysema.query.annotations.QueryDelegate; import com.mysema.query.types.Predicate; public class StockKeepingUnitPredicates { @QueryDelegate(StockKeepingUnit.class) public static Predicate search(QStockKeepingUnit path, SkuSearchRequest request) { BooleanBuilder builder = new BooleanBuilder(); if (request.getMinPrice() != null) { builder.and(path.price.goe(request.getMinPrice())); } if (request.getMaxPrice() != null) { builder.and(path.price.loe(request.getMaxPrice())); } BooleanBuilder attrBuilder = new BooleanBuilder(); for (String attr : request.getAttributes().keySet()) { BooleanBuilder valueBuilder = new BooleanBuilder(); for (String val : request.getAttributes().get(attr)) { valueBuilder.or(path.values.any().attribute().name.equalsIgnoreCase(attr) .and(path.values.any().name.equalsIgnoreCase(val))); } attrBuilder.and(valueBuilder); } builder.and(attrBuilder.getValue()); Predicate predicate = builder.getValue(); return predicate; } }