微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

JPA 查询以连接空字段

如何解决JPA 查询以连接空字段

您好,这是连接品牌名称标题标题查询

@Query(value="SELECT c FROM ProductOption c WHERE  cast( c.id AS string ) like %:search% or CONCAT(COALESCE(c.product.brand.name,''),' ',c.product.title,c.underTitle) like %:search%")
Page<ProductOption> findAllBySearch(String search,Pageable pageable);

然而,每次品牌为空时,productoption 不包括在响应中..

基本上我想要的是连接品牌名称标题标题,如果品牌不为空,如果它是空的,按标题标题连接..

我尝试了更多使用 CASE etd 的方法...

解决方法

连接 WHERE 子句中的字符串时,您可以使用 path operator "."ProductOption 导航到 product,然后从那里导航到 brand。>

@Query(value="... CONCAT(COALESCE(c.product.brand.name,''),' ',c.product.title,c.underTitle) like %:search%")

这会在生成的 SQL 语句中创建 2 个 INNER JOINs,排除没有 ProductOptionproduct 或没有 productbrand

您可以通过在 FROM 子句中使用 defining LEFT JOINs 并在 WHERE 子句中引用这些 JOINS 的别名来避免这种情况:

@Query(value="SELECT c FROM ProductOption c LEFT JOIN c.product p LEFT JOIN p.brand b WHERE  cast( c.id AS string ) like %:search% or CONCAT(COALESCE(b.name,p.title,c.underTitle) like %:search%")
Page<ProductOption> findAllBySearch(String search,Pageable pageable);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。