【问题标题】:jpa query with optional parameters带有可选参数的 jpa 查询
【发布时间】:2017-11-29 02:57:21
【问题描述】:

我正在使用 Spring Data Rest JPA,它根据方法名称在内部实现查询。

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

StateId 是必需的,但 name 和 age 是可选的过滤器参数

public List<User> findByStateIdAndNameOrAge(Integer stateId, String name , Integer age, Pageable pageable);

我没有得到任何结果。我哪里做错了?

【问题讨论】:

  • @KrishnaKuntala 但 spring data-jpa 将立即实施
  • 我认为您的查询可能被解释为:(StateId And name) OR Age 这不是您想要的。您最好的选择是使用标准 api 或创建动态查询,因为您的查询在您的可选参数的运行时函数中发生变化。

标签: spring hibernate spring-data-jpa jpql


【解决方案1】:

你可以试试

你的方法定义没有错误。

public List<User> findByStateIdAndNameOrAge(Integer stateId, String name , Integer age, Pageable pageable);

但您不能将空参数传递给此方法,因此如果您将任何参数设置为空白,它将无法正常工作。

【讨论】:

  • 是的。 name 和 age 是请求参数。它们可以为空,如果是,它应该返回完整的用户列表
  • 另一种方法是,您可以在调用 API 之前弄清楚哪些参数会为空,并根据它调用不同的 API。
  • 例如,如果您发现名称为空,那么您应该触发一个没有名称作为输入参数的 API。只需删除为 null 的 API 参数即可。为此,您应该将 API 触发为 public List findByStateIdAndAge(Integer stateId, Integer age, Pageable pageable);
猜你喜欢
  • 2018-08-16
  • 2019-04-22
  • 2018-04-27
  • 1970-01-01
  • 2014-10-05
  • 2021-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多