Java JPQL查询案例WHEN始终为false

Java JPQL查询案例WHEN始终为false,java,mysql,sql,spring,jpa,Java,Mysql,Sql,Spring,Jpa,您好,我对spring、java 8、hibernate、mysql应用程序有一个很长的查询,该应用程序按预期工作,但最后一部分除外,它对存储中的保留项求和: SELECT new example.package.RaktarKimutatasDTO(rk.cikkId.cikkName, CONCAT(SUM(rk.mennyisegMe1),' ', rk.me1.unitCode, ' / ', SUM(rk.mennyisegMe2),' ', rk.me2.unitCode, ' /

您好,我对spring、java 8、hibernate、mysql应用程序有一个很长的查询,该应用程序按预期工作,但最后一部分除外,它对存储中的保留项求和:

SELECT new example.package.RaktarKimutatasDTO(rk.cikkId.cikkName, 
CONCAT(SUM(rk.mennyisegMe1),' ', rk.me1.unitCode, ' / ', SUM(rk.mennyisegMe2),' ', rk.me2.unitCode, ' / ', SUM(rk.mennyisegMe3),' ', rk.me3.unitCode), 
CONCAT(AVG(rk.listaar), ' Ft'), 
CONCAT(rk.mennyisegMe1*rk.listaar, ' Ft'), 
rk.raktarId.raktarNeve, rk.cikkId.vtsz.vatCode, 
SUM(CASE WHEN rk.vevoiEntity IS NOT NULL THEN rk.mennyisegMe1 ELSE 0.0 END)) 
FROM RaktarkeszletEntity rk 
WHERE rk.raktarId.identifier IN ?1 AND rk.createDate<?2 AND (rk.bejovoszamlaEntity LIKE 'RB%' OR (rk.bejovoszamlaEntity LIKE 'BM%' AND rk.bevetel = TRUE)) 
GROUP BY rk.cikkId
或:

生成的查询:

select
        basecikkek1_.cikk_name as col_0_0_,
        concat(sum(rak0_.mennyiseg_me_1),
        ' ',
        men2_.unit_code,
        ' / ',
        SUM(rak0_.mennyiseg_me_2),
        ' ',
        men3_.unit_code,
        ' / ',
        SUM(rak0_.mennyiseg_me_3),
        ' ',
        men4_.unit_code) as col_1_0_,
        concat(avg(rak0_.listaar),
        ' Ft') as col_2_0_,
        concat(rak0_.mennyiseg_me_1*rak0_.listaar,
        ' Ft') as col_3_0_,
        rak5_.raktar_name as col_4_0_,
        vts7_.vat_code as col_5_0_,
        sum(case 
            when rak0_.szallitolevel_tetel_id is not null 
            or rak0_.kimeno_tetel_id is not null 
            or rak0_.vevoi_tetel_id<>0 then rak0_.mennyiseg_me_1 
            else 0 
        end) as col_6_0_ 
    from
        nast_raktarkeszlet rak0_ cross 
    join
        nast_cikkek basecikkek1_ cross 
    join
        nast_vtsz vts7_ cross 
    join
        nast_units men2_ cross 
    join
        nast_units men3_ cross 
    join
        nast_units men4_ cross 
    join
        nast_raktarak rak5_ 
    where
        rak0_.cikk_id=basecikkek1_.id 
        and basecikkek1_.vtsz=vts7_.id 
        and rak0_.me_1=men2_.id 
        and rak0_.me_2=men3_.id 
        and rak0_.me_3=men4_.id 
        and rak0_.raktar_id=rak5_.id 
        and (
            rak0_.raktar_id in (
                ? , ? , ? , ?
            )
        ) 
        and rak0_.create_date<? 
        and (
            rak0_.parentid like 'RB%' 
            or (
                rak0_.parentid like 'BM%'
            ) 
            and rak0_.bevetel=1
        ) 
    group by
        rak0_.cikk_id
选择
basecikkek1_uu。cikk_u名称为col_0_u0_uu,
concat(总和(rak0.mennyiseg_me_1),
' ',
菜单2.单位代码,
' / ',
总和(rak0.mennyiseg_me_2),
' ',
菜单3.单位代码,
' / ',
总和(千分之三),
' ',
菜单4(单位代码)作为列1\u 0,
平均干重(rak0_.listaar),
“Ft”)作为第2列第0列,
concat(rak0.mennyiseg_me_1*rak0.listaar,
“Ft”)作为第3列第0列,
rak5。raktar名称为col_4_0,
vts7.增值税代码为列5\u 0,
总数(例)
当rak0_u0.szallitolevel_tetel_id不为空时
或rak0_uu.kimeno_tetel_id不为空
或者说,如果你是我的朋友,那么你可以选择我的朋友
其他0
结束)作为第6列第0列
从…起
nast_raktarkeszlet rak0_交叉
参加
nast_cikkek Baseckkek 1_交叉
参加
nast_vtsz vts7_交叉
参加
nast_单位门2_交叉
参加
nast_单位门3_交叉
参加
nast_单位门4_交叉
参加
nast_raktarak Rak 5_
哪里
rak0_kk_id=basecikkk1_kk.id
和basecikkek1_u0.vtsz=vts7_0.id
并且rak0_u.me_u1=men2_u.id
并且rak0_u.me_u2=men3_u.id
并且rak0_uu.me_u3=men4_u.id
和rak0_u0.raktar_uid=rak5_0.id
及(
rak0_uu。raktar_uID输入(
? , ? , ? , ?
)
) 

还有rak0.create_dateOMG my bad。WHERE条件排除具有非空“vevoientity”的记录。

任何时候在计算中使用空值或任何字段的concat(或任何函数),整个结果都将为空。您在公式中使用的所有值都不是空值吗?如果不输入ISNULL(值“,”)(或0,如果是数字等等),则显示生成的SQL,以及您正在使用的工作方式。您可能希望简化查询以测试case语句,然后将其重新构建,以查看哪个部分可能导致该case语句出现问题SUM(当ISNULL(rk.Vevoienty,0)>0时为case,然后rk.mennyisegMe1 ELSE 0 END)导致运行时异常com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:调用本机函数'ISNULL'时参数计数不正确。我发现mysql应该使用IFNULL,因此没有错误,只是通常的0结果。。。
SELECT rk.cikk_id, CONCAT(SUM(rk.mennyiseg_me_1),' ', rk.me_1, ' / ', SUM(rk.mennyiseg_me_2),' ', rk.me_2, ' / ', SUM(rk.mennyiseg_me_3),' ', rk.me_3), CONCAT(AVG(rk.listaar), ' Ft'), CONCAT(rk.mennyiseg_me_1*rk.listaar, ' Ft'), rk.raktar_id, rk.cikk_id, SUM(CASE WHEN IFNULL(rk.vevoi_tetel_id, 0) >0 THEN rk.mennyiseg_me_1 ELSE 0 END) FROM nast_raktarkeszlet rk GROUP BY rk.cikk_id
select
        basecikkek1_.cikk_name as col_0_0_,
        concat(sum(rak0_.mennyiseg_me_1),
        ' ',
        men2_.unit_code,
        ' / ',
        SUM(rak0_.mennyiseg_me_2),
        ' ',
        men3_.unit_code,
        ' / ',
        SUM(rak0_.mennyiseg_me_3),
        ' ',
        men4_.unit_code) as col_1_0_,
        concat(avg(rak0_.listaar),
        ' Ft') as col_2_0_,
        concat(rak0_.mennyiseg_me_1*rak0_.listaar,
        ' Ft') as col_3_0_,
        rak5_.raktar_name as col_4_0_,
        vts7_.vat_code as col_5_0_,
        sum(case 
            when rak0_.szallitolevel_tetel_id is not null 
            or rak0_.kimeno_tetel_id is not null 
            or rak0_.vevoi_tetel_id<>0 then rak0_.mennyiseg_me_1 
            else 0 
        end) as col_6_0_ 
    from
        nast_raktarkeszlet rak0_ cross 
    join
        nast_cikkek basecikkek1_ cross 
    join
        nast_vtsz vts7_ cross 
    join
        nast_units men2_ cross 
    join
        nast_units men3_ cross 
    join
        nast_units men4_ cross 
    join
        nast_raktarak rak5_ 
    where
        rak0_.cikk_id=basecikkek1_.id 
        and basecikkek1_.vtsz=vts7_.id 
        and rak0_.me_1=men2_.id 
        and rak0_.me_2=men3_.id 
        and rak0_.me_3=men4_.id 
        and rak0_.raktar_id=rak5_.id 
        and (
            rak0_.raktar_id in (
                ? , ? , ? , ?
            )
        ) 
        and rak0_.create_date<? 
        and (
            rak0_.parentid like 'RB%' 
            or (
                rak0_.parentid like 'BM%'
            ) 
            and rak0_.bevetel=1
        ) 
    group by
        rak0_.cikk_id