连接空字段的 JPA 查询

JPA query to concat null field

您好,这是连接品牌名称、标题和副标题的查询

@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);

但是每次 brand 为 null 时,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,排除没有 product 或没有 productProductOption 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);