Вы можете использовать Спецификацию с вашим JpaRepository для создания динамического запроса, построенного во время выполнения.
Добавить JpaSpecificationExecutor в интерфейс JpaRepository ...
@Repository
public interface MyRepo extends JpaRepository<MyEntity, Long>, JpaSpecificationExecutor {
}
Затем создайте класс со статическим методом, который возвращает спецификацию ....
public class MyEntitySearchSpec {
private MyEntitySearchSpec() {
// Remove this private constructor if need to add public non-static methods.
}
public static Specification<MyEntity> myEntitySearch(
final mysearchCriteria MySearchCriteria) {
return (root, query, cb) -> {
List<Predicate> predicates = new ArrayList<>();
if (mysearchCriteria.isOnlyActive()) {
predicates.add(cb.isNull(root.get("closeDate")));
}
if (mysearchCriteria.getCaseNumber() != null) {
predicates.add(cb.equal(root.get("caseNumber"),
mysearchCriteria.getCaseNumber()));
}
return cb.and(predicates.toArray(new Predicate[] {}));
};
}
}
Вы можете позвонить, как это ...
myRepo.findAll(myEntitySearch(mysearchCriteria));