如何解决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,排除没有 ProductOption
的 product
或没有 product
的 brand
。
您可以通过在 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 举报,一经查实,本站将立刻删除。