【发布时间】:2022-12-08 09:58:41
【问题描述】:
我将 Spring 与 Hibernate、MySQL、JPQL 一起使用。我的存储库中有这样一个方法:
@Query("""
SELECT w FROM Window w
LEFT JOIN w.ramps r
WHERE r.isDeleted = false
AND w.id = :id
""")
@EntityGraph(attributePaths = {"warehouse", ...})
Optional<Window> findByIdWithNotDeletedRamps(long id);
我的目标:我想获取所有依赖ramps但只有未删除ramps(ramp.isDeleted = false)的窗口。如果窗口只删除了ramps 那么我应该会收到一个带有ramps 空列表的窗口
到目前为止,我获取了所有窗口,然后在代码中使用 Mapstruct 过滤了 window.ramps 以接收 windows 并且仅未删除(isDeleted 标志 = false)斜坡。我想知道如何编写 sql 来接收 windows 以及仅未删除的列表 ramps?可能吗?
我试过上面的代码,但这是一个不好的方法,因为当 Windows 没有任何斜坡时,就不会收到这个特定的 window。
【问题讨论】:
-
r.isDeleted = 假作为 join 的一部分而不是 where 的一部分。这使您的左连接变为内连接
SELECT w FROM Window w LEFT JOIN w.ramps r on r.isDeleted = false WHERE w.id = :id