आप इसे JpaSpecificationExecutor
. के साथ आसानी से कर सकते हैं और एक कस्टम Specification
:https://spring .io/blog/2011/04/26/advanced-spring-data-jpa-specifications-and-querydsl/
मैं हैश मैप को एक डीटीओ के साथ बदल दूंगा जिसमें सभी वैकल्पिक प्राप्त पैरा होंगे, फिर उस डीटीओ के आधार पर विनिर्देशों का निर्माण करें, जाहिर है कि आप हैश मैप भी रख सकते हैं और इसके आधार पर विनिर्देश बना सकते हैं।
मूल रूप से:
public class VehicleFilter implements Specification<Vehicle>
{
private String art;
private String userId;
private String vehicle;
private String identifier;
@Override
public Predicate toPredicate(Root<Vehicle> root, CriteriaQuery<?> query, CriteriaBuilder cb)
{
ArrayList<Predicate> predicates = new ArrayList<>();
if (StringUtils.isNotBlank(art))
{
predicates.add(cb.equal(root.get("art"), art));
}
if (StringUtils.isNotBlank(userId))
{
predicates.add(cb.equal(root.get("userId"), userId));
}
if (StringUtils.isNotBlank(vehicle))
{
predicates.add(cb.equal(root.get("vehicle"), vehicle));
}
if (StringUtils.isNotBlank(identifier))
{
predicates.add(cb.equal(root.get("identifier"), fab));
}
return predicates.size() <= 0 ? null : cb.and(predicates.toArray(new Predicate[predicates.size()]));
}
// getter & setter
}
और नियंत्रक:
@RequestMapping(value = "/{ticket}/count", method = RequestMethod.GET)
public long getItemsCount(
@PathVariable String ticket,
VehicleFilter filter,
HttpServletRequest request
) throws Exception
{
return vehicleService.getCount(filter);
}
सेवा:
@Override
public long getCount(VehicleFilter filter)
{
return vehicleRepository.count(filter);
}
भंडार:
@Repository
public interface VehicleRepository extends JpaRepository<Vehicle, Integer>, JpaSpecificationExecutor<Vehicle>
{
}
कंपनी कोड से अनुकूलित एक त्वरित उदाहरण, आपको समझ में आ गया!