我的理解是,使用Spring,我不能有一个查询方法来获取列等于给定的非空方法参数的所有行,并且在方法参数为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个不同的查询方法,那就太糟糕了。
发布于 2015-05-13 15:57:01
你是正确的。
提出了一个请求,以支持更好地处理空参数。https://jira.spring.io/browse/DATAJPA-121
在您的例子中,我建议您编写存储库实现,并使用自定义CriteriaQuery来处理您的案例。
@Query("[...] where :parameter is null"
public List<Something> getSomethingWithNullParameter();编辑
从SpringDataJPA2.0开始,Spring现在支持@Nullable注释。这有助于处理传递的空参数。
来自文档:
@Nullable -用于可以为null的参数或返回值。
发布于 2018-07-01 13:18:34
我发现something...if u将参数放在jpa方法中,如下所示
@Param("value") String value,然后它可以是null,在查询中您将有以下条件:
(table.value = :value OR :value IS NULL)如果该值为null,它将自动返回true,如果是null,它将在表中搜索该值。
发布于 2016-10-20 10:06:07
看来按例查询可能就是你所需要的。
示例查询是Spring中的一个新特性(自Hopper版本以来,2016年4月推出),它允许使用这样的代码创建简单的动态查询
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实例都有这些方法。
https://stackoverflow.com/questions/30219486
复制相似问题