Java 如何初始化Spring数据JPA的规范?
我有一个使用过滤器进行搜索的方法,因此我使用它来构建动态查询:Java 如何初始化Spring数据JPA的规范?,java,spring-data-jpa,dynamicquery,Java,Spring Data Jpa,Dynamicquery,我有一个使用过滤器进行搜索的方法,因此我使用它来构建动态查询: public Page<Foo> searchFoo(@NotNull Foo probe, @NotNull Pageable pageable) { Specification<Foo> spec = Specification.where(null); // is this ok? if(probe.getName() != null) {
public Page<Foo> searchFoo(@NotNull Foo probe, @NotNull Pageable pageable) {
Specification<Foo> spec = Specification.where(null); // is this ok?
if(probe.getName() != null) {
spec.and(FooSpecs.containsName(probe.getName()));
}
if(probe.getState() != null) {
spec.and(FooSpecs.hasState(probe.getState()));
}
//and so on...
return fooRepo.findAll(spec, pageable);
}
规范。其中(null)
工作正常。
它用@Nullable
进行注释,并且实现会按其应该的方式处理null
值
问题在于,您正在使用和方法,好像它将修改规范
,但它会创建一个新规范。所以你应该使用
spec = spec.and( ... );
你会得到什么样的例外?我认为这应该行得通。请添加堆栈跟踪。另外,如果你已经知道“上面的代码不起作用”@jenschauder没有错误,但它不会过滤,那么你为什么要问“这样行吗?”。我总是能得到桌子上的所有结果。我问它是否可以,因为我不确定它是否可以,我没有看到这样的例子。此外,当我调试时,我看到spec
为空。你能分享一下FooSpecs
的代码吗?用FooSpecs(又称处方规范)更新的,嗯,我觉得还可以。它们自己工作吗,比如在fooRepo.findAll(containsUserCode(“XXX”),可分页)代码>?假设我有5个字段,但是因为它们都是空的,所以spec的值是Specification.where(null)
。问题:有没有办法检查规范是否等于规范。其中(空)
@IlyaSerebryannikov请不要在评论中提出新问题,而是在问题中提出。
spec = spec.and( ... );