在查询jpa jpql中处理null @Query(“从选修课e中选择e加入e.catalog选修课ce加入ce.catalog c,其中c.catalogId=:catalogId和e.instId=:instId”) 公共列表findbycatalogydinstitd(@Param(“instit”)Long institd,@Param(“catalogId”)Long catalogId);

在查询jpa jpql中处理null @Query(“从选修课e中选择e加入e.catalog选修课ce加入ce.catalog c,其中c.catalogId=:catalogId和e.instId=:instId”) 公共列表findbycatalogydinstitd(@Param(“instit”)Long institd,@Param(“catalogId”)Long catalogId);,jpa,repository,jpql,Jpa,Repository,Jpql,我有这个密码。我希望它能够工作,如果有人为catalogId输入一个空值,那么它将忽略where子句,所以它将只返回所有where e.institd=:institd。我该怎么做?用另一个条件扩展WHERE子句怎么样?例如: 选择e 从选修课e向左加入e.catalog选修课ce向左加入ce.catalog c 其中(c.catalogId=:catalogId和e.institd=:institd)或 (c.catalogId为NULL,e.institd=:institd) 到目前为止,您

我有这个密码。我希望它能够工作,如果有人为catalogId输入一个空值,那么它将忽略where子句,所以它将只返回所有where e.institd=:institd。我该怎么做?

用另一个条件扩展WHERE子句怎么样?例如:

选择e
从选修课e向左加入e.catalog选修课ce向左加入ce.catalog c
其中(c.catalogId=:catalogId和e.institd=:institd)或
(c.catalogId为NULL,e.institd=:institd)

到目前为止,您尝试了什么?如果你描述一下这一点以及为什么它不起作用,那么它将对我们有更多的帮助。如果你没有尝试过任何东西,试着浏览相关文档,看看他们说了什么。如果他们什么也没说,那么请在你的问题中包括这一点。这看起来是对的,但当我为catalogId发送一个null和一个有效的instit时,它会返回一个空的。我应该使用左连接吗?是的,使用
LEFT[OUTER]JOIN
是有意义的,因为
[internal]JOIN
排除了任何没有编目的选修课。我已经相应地更新了查询。谢谢你指出这一点!
@Query("SELECT e FROM Elective e JOIN e.catalogElectives ce JOIN ce.catalog c WHERE c.catalogId = :catalogId AND e.instId = :instId")
public List<Elective> findByCatalogIdAndInstId(@Param("instId") Long instId, @Param("catalogId") Long catalogId);