Spring 带有可选参数的jpa查询

Spring 带有可选参数的jpa查询,spring,hibernate,spring-data-jpa,jpql,Spring,Hibernate,Spring Data Jpa,Jpql,我正在使用SpringDataRESTJPA,它在内部根据方法名实现查询 我在我的存储库界面中编写了以下方法,该方法应列出处于某一状态的所有用户,如果存在姓名和/或年龄,则应过滤结果。 StateId是必需的,但名称和年龄是可选的筛选参数 public List<User> findByStateIdAndNameOrAge(Integer stateId, String name , Integer age, Pageable pageable); 公共列表findBystate

我正在使用SpringDataRESTJPA,它在内部根据方法名实现查询

我在我的存储库界面中编写了以下方法,该方法应列出处于某一状态的所有用户,如果存在姓名和/或年龄,则应过滤结果。

StateId是必需的,但名称和年龄是可选的筛选参数

public List<User> findByStateIdAndNameOrAge(Integer stateId, String name , Integer age, Pageable pageable);
公共列表findBystatedAndNameOrage(整数stateId、字符串名称、整数年龄、可分页);
我没有得到任何结果。我哪里做错了?

你可以试试

您的方法定义没有错误

public List<User> findByStateIdAndNameOrAge(Integer stateId, String name , Integer age, Pageable pageable);
公共列表findBystatedAndNameOrage(整数stateId、字符串名称、整数年龄、可分页);

但您不能将null参数传递给此方法,因此如果您将任何参数设置为空,则该方法将不起作用。

@KrishnaKuntala但spring data jpa将实现开箱即用。我认为您的查询可能被解释为:(StateId和name)或您不想要的年龄。您的最佳选择是使用criteria api或创建动态查询,因为您的查询在运行时更改了可选参数的函数。可能重复“是”。姓名和年龄是请求参数。它们可以为null,如果为null,则应返回完整的用户列表。另一种方法是,在点击API之前,您可以确定哪些参数为null,并根据它调用不同的API。例如,如果您得到的名称为空,则应触发一个没有名称作为输入参数的API。只需删除空的API参数即可。为此,您应该启动一个API作为public List findbystateidage(Integer stateId、Integer age、Pageable Pageable);