Spring 数据 JPA 和可以为 null 的参数

新手上路,请多包涵

我的理解是,对于 Spring 数据 JPA,我无法使用查询方法来获取列等于给定非空方法参数的所有行,并且在方法参数为 null 时使用相同的方法来获取此列为 NULL 的所有行.

那是对的吗?

所以我必须在我的 JAVA 代码中区分这一点,并且我必须使用单独的查询方法明确要求空值,如下例所示?

 // Query methods
List<Something> findByParameter(Parameter parameter);
List<Something> findByParameterIsNull();

...

List<Something> result = new ArrayList<>();

if (parameter == null)
  result = findByParameterIsNull();
else
  result = findByParameter(parameter);

这很糟糕,如果我有 4 个可能为 null 的参数并且必须编写 16 种不同的查询方法。

原文由 Sebastian S. 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 957
2 个回答

你说的对。

已请求支持更好地处理空参数。 https://jira.spring.io/browse/DATAJPA-121

对于您的情况,我建议您编写存储库实现并使用自定义 CriteriaQuery 来处理您的情况。

您还可以使用带有 is null 语法的 @Query 注释:

 @Query("[...] where :parameter is null"
public List<Something> getSomethingWithNullParameter();

编辑

从Spring data jpa 2.0开始,spring现在支持@Nullable注解。这有助于处理传递的空参数。

文档 中:

@Nullable – 用于可以为空的参数或返回值。

原文由 Laurent B 发布,翻译遵循 CC BY-SA 3.0 许可协议

我发现了一些东西…如果你像这样将参数放在 jpa 方法中

@Param("value") String value,

那么它可以为 null 并且在查询中您将遇到以下情况:

 (table.value = :value OR :value IS NULL)

如果值为 null,它将自动返回 true,如果不为 null,它将在表中搜索该值。

原文由 fvukovic 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题