繁体   English   中英

Null 检查输入 object 在 spring 引导 jpa 查询

[英]Null check on input object in spring boot jpa query

我有这个 object:

@Getter
@Setter
public class PhaseBean {
   private Long id;
   private String name;
   private PhaseBean subPhase;
}

作为输入传递给此回购方法(简化):

@Query(value= 
  " ... 
    and ( :#{#phaseBean.id} is null or :#{#phaseBean.name} is null ....                  //row1
    and ( :#{#phaseBean.subPhase} is null or :#{#phaseBean.subPhase.id} is null or ...   //row2
    ... "
)
List<Phase> load(@Param("phaseBean") PhaseBean phaseBean);

在我完成的测试中,phaseBean 以这种方式被评估:

id = 3 
name = null
subPhase = null

当执行 repo 方法时,出现此错误:

SpelEvaluationException: EL1007E: Property or field 'id' cannot be found on null

我做了两个不同的测试:

  1. 注释查询的“row1”并执行方法 - >同样的错误
  2. 注释查询的“row2”并执行方法 -> 方法有效!

所以我确定问题是检查:#{#phaseBean.subPhase} is null不适用于内部 object。
有什么建议吗? 非常感谢。

最后,我必须更改方法签名以使用 String、Long ecc。 作为输入而不是我的自定义 object ( PhaseBean ); 通过这种方式,我可以使用“正常”语法“:param”并且一切正常(我在调用者方法中移动了 PhaseBean 对象的 null 控件):

@Query(value= 
" ... 
and ( :subPhaseId is null or ...   //row2
... "
)
List<Phase> load(
...
@Param("phaseId") Long phaseId, @Param("subPhaseId") Long subPhaseId
...
);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM