首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring数据JPA和可以为空的参数

问Spring数据JPA和可以为空的参数
EN

Stack Overflow用户
提问于 2015-05-13 15:38:51
回答 8查看 93.8K关注 0票数 45

我的理解是,使用Spring,我不能有一个查询方法来获取列等于给定的非空方法参数的所有行,并且在方法参数为null时,使用相同的方法获取该列为NULL的所有行。

对吗?

因此,我必须在JAVA代码中区分这一点,并且必须使用单独的查询方法显式地请求空值,如下面的示例所示?

代码语言:javascript
复制
// 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个不同的查询方法,那就太糟糕了。

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2015-05-13 15:57:01

你是正确的。

提出了一个请求,以支持更好地处理空参数。https://jira.spring.io/browse/DATAJPA-121

在您的例子中,我建议您编写存储库实现,并使用自定义CriteriaQuery来处理您的案例。

此外,您还可以使用@查询注释和为空语法:

代码语言:javascript
复制
@Query("[...] where :parameter is null"
public List<Something> getSomethingWithNullParameter();

编辑

从SpringDataJPA2.0开始,Spring现在支持@Nullable注释。这有助于处理传递的空参数。

来自文档:

@Nullable -用于可以为null的参数或返回值。

票数 26
EN

Stack Overflow用户

发布于 2018-07-01 13:18:34

我发现something...if u将参数放在jpa方法中,如下所示

代码语言:javascript
复制
@Param("value") String value,

然后它可以是null,在查询中您将有以下条件:

代码语言:javascript
复制
(table.value = :value OR :value IS NULL)

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

票数 16
EN

Stack Overflow用户

发布于 2016-10-20 10:06:07

看来按例查询可能就是你所需要的。

示例查询是Spring中的一个新特性(自Hopper版本以来,2016年4月推出),它允许使用这样的代码创建简单的动态查询

代码语言:javascript
复制
Person person = new Person();                          
person.setFirstname("Dave");                           

ExampleMatcher matcher = ExampleMatcher.matching()     
  .withIncludeNullValues();                        

Example<Person> example = Example.of(person, matcher);

personRepository.count(example);
personRepository.findOne(example);
personRepository.findAll(example);

方法count/findOne/findAll以org.springframework.data.domain.Example实例作为参数(有些还采用排序/分页参数)来自org.springframework.data.repository.query.QueryByExampleExecutor<T>接口,该接口通过org.springframework.data.jpa.repository.JpaRepository<T, ID extends Serializable>接口进行扩展。

简而言之,现在所有的JpaRepository实例都有这些方法。

票数 15
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30219486

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档