public static Specification dynamicQuery(Map filters) {
return (root, query, criteriaBuilder) -> {
List predicates = new ArrayList();
// Construct predicates based on non-empty parameters
if (filters.containsKey("bin") && !filters.get("bin").toString().isEmpty()) {
predicates.add(criteriaBuilder.equal(root.get("bin"), filters.get("bin").toString()));
}
if (filters.containsKey("bankcode") && !filters.get("bankcode").toString().isEmpty()) {
predicates.add(criteriaBuilder.equal(root.get("bankcode"), filters.get("bankcode").toString()));
}
if (filters.containsKey("bankname") && !filters.get("bankname").toString().isEmpty()) {
predicates.add(criteriaBuilder.equal(root.get("bankname"), filters.get("bankname").toString()));
}
if (filters.containsKey("switchname") && !filters.get("switchname").toString().isEmpty()) {
predicates.add(criteriaBuilder.equal(root.get("switchname"), filters.get("switchname").toString()));
}
// Apply the predicates to the query
query.where(criteriaBuilder.and(predicates.toArray(new Predicate[0])));
// Apply the selections to the query (if needed)
if (filters.containsKey("searchContent")) {
List searchContent = (List) filters.get("searchContent");
List
Подробнее здесь: [url]https://stackoverflow.com/questions/78671226/spring-jpa-specification-dynamic-query-for-dynamic-select-but-it-doesnt-give-me[/url]
У меня есть эта функция для CardBinSpecification [code]public static Specification dynamicQuery(Map filters) { return (root, query, criteriaBuilder) -> { List predicates = new ArrayList();
// Construct predicates based on non-empty parameters if (filters.containsKey("bin") && !filters.get("bin").toString().isEmpty()) { predicates.add(criteriaBuilder.equal(root.get("bin"), filters.get("bin").toString())); }
if (filters.containsKey("bankcode") && !filters.get("bankcode").toString().isEmpty()) { predicates.add(criteriaBuilder.equal(root.get("bankcode"), filters.get("bankcode").toString())); }
if (filters.containsKey("bankname") && !filters.get("bankname").toString().isEmpty()) { predicates.add(criteriaBuilder.equal(root.get("bankname"), filters.get("bankname").toString())); }
if (filters.containsKey("switchname") && !filters.get("switchname").toString().isEmpty()) { predicates.add(criteriaBuilder.equal(root.get("switchname"), filters.get("switchname").toString())); }
// Apply the predicates to the query query.where(criteriaBuilder.and(predicates.toArray(new Predicate[0])));
// Apply the selections to the query (if needed) if (filters.containsKey("searchContent")) { List searchContent = (List) filters.get("searchContent"); List