当前位置: 首页 > 知识库问答 >
问题:

spring boot jpa查询中输入对象的Null检查

单于奇略
2023-03-14

我有这个对象:

@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

我做了2个不同的测试:

  1. 注释查询的“row1”并执行方法-

因此,我确信问题在于检查:{{#phaseBean.subPhase}为null对内部对象无效<有什么建议吗?谢谢。

共有1个答案

呼延骏俊
2023-03-14

最后,我必须更改方法签名以使用String, Long ecc.作为输入,而不是我的自定义对象(PhaseBean);这样我就可以使用“普通”sintax“:参数”并且一切正常(我在调用者方法中移动PhaseBean对象的空控件):

@Query(value= 
" ... 
and ( :subPhaseId is null or ...   //row2
... "
)
List<Phase> load(
...
@Param("phaseId") Long phaseId, @Param("subPhaseId") Long subPhaseId
...
);
 类似资料:
  • 所以我想对值中包含的值进行空安全检查。 所以我有三个相互包含的对象: Person有一个衣服对象,这个衣服对象有一个国家对象,这个国家对象有一个资本 所以一个人可能没有衣服,所以像这样的支票会抛出一个空指针: 如果路径上的任何对象为空,我如何使这样的语句返回false? 我也不想这样做。(如果可能的话,Java-8中的一行。

  • 下面的代码应该能够清楚地说明我想要实现的目标。关键问题在于meta_查询中的第二个数组。我正在尝试查找字段“alias”未设置post_对象的帖子。 使用var_dump(get_字段('alias')运行查询时;返回的结果为“NULL”。我不知道如何基于空的post对象字段进行查询。我非常感谢你的指点。

  • 问题内容: 我正在写一个JPQL查询,它基于 Categories 集合进行查询。我的类别可以为空,因此我正在使用:categories = NULL进行检查。 当类别为NULL时,以上方法可以正常工作。但是,当类别超过一个值时,我得到了错误 java.sql.SQLException:操作数应包含1列 与hibernate有关的痕迹是 (?,?)或(?,?)中的category6_.catego

  • 当childIds参数有值时,查询可以正常工作。但是childIds是一个可选参数,它可能是一个空列表或null,在这种情况下我想忽略where子句并简单地返回 所以我将查询修改为: 现在,当childIds为空(=[])时,该查询返回0个结果,因为为false,(:childIds)中的

  • 确保你连接上了服务器,如在先前的章节讨论的。连接上服务器并布代表选择了任何数据库,但这样就可以了。知道关于如何查询的基本知识,比马上跳至创建表、给他们装载数据并且从他们检索数据更重要。本节描述输入命令的基本原则,使用几个查询,你能尝试了解mysql是如何工作的。 这是一个简单的命令,要求服务器告诉它的版本号和当前日期。在mysql>提示输入如下命令并按回车键: mysql> SELECT VERS

  • 我试图连接2个表,并通过构造函数查询将结果添加到一个新对象。并非左表中的所有ID都在右表中。因此,通过外部联接,我希望从左表中获得所有结果,并从右表中获得结果,如果没有结果,则为null值。 我如何解决这个问题,是否可以让第二个参数是可选的?因为参数二是一个对象,这将自动解析为空值,解决了我的问题。 我在pgadmin中重新创建了查询,并得到了预期的结果。通过移除左边的外部联接(以及object中