Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java “多重”;选择Case";使用EclipseLink将语句聚合到命名查询中_Java_Jpa_Eclipselink_Case_Jpql - Fatal编程技术网

Java “多重”;选择Case";使用EclipseLink将语句聚合到命名查询中

Java “多重”;选择Case";使用EclipseLink将语句聚合到命名查询中,java,jpa,eclipselink,case,jpql,Java,Jpa,Eclipselink,Case,Jpql,我正在使用eclipselink v2.3在java代码中编写一个简单的查询。 这个查询必须只返回一个字符串和两个整数,我想这并不奇怪,至少我想 我正在构建的查询如下所示: q = entityManager.createQuery( "SELECT new com.myclass.CalculationQueryResult(transits.device.name," + " SUM(case when transits.direction = 1 then 1 el

我正在使用eclipselink v2.3在java代码中编写一个简单的查询。 这个查询必须只返回一个字符串和两个整数,我想这并不奇怪,至少我想

我正在构建的查询如下所示:

q = entityManager.createQuery(
    "SELECT new com.myclass.CalculationQueryResult(transits.device.name,"
        + " SUM(case when transits.direction = 1 then 1 else 0 end) ,"
        + " SUM(case when transits.direction = 0 then 1 else 0 end)) from Transits_Log transits "
        + " where transits.device.name in :devices and transits.dateTime >= :startDate"
        + " and transits.dateTime < :endDate group by transits.device.name" + " order by transits.device.name",
    CalculationQueryResult.class);
正如您所看到的,SQL生成的语句在前两行是错误的,因为第一个和第二个和应该是一个相反的,而不是另一个


我是不是做错了什么?JPQL是否支持多个嵌套的大小写和和?有没有办法绕过错误(如果是这样的话),而不必直接编写本机SQL代码?

这很奇怪。你确定你的JPQL是正确的并且是编译/部署的吗

你能试试2.4版本吗


如果它仍然发生,请记录一个bug。

谢谢你和我一样的想法。我认为在编译/部署时没有任何错误。我目前正在eclipse/tomcat上直接调试应用程序。只是为了确定,是否有任何“缓存文件”(对不起,我是JPA初学者)我必须删除?然后,我将尝试2.4版本,并在必要时发布一个bug。你解决了吗?我也有类似的问题
SELECT t0.Name, 
    **SUM(CASE  WHEN (t1.Direction = 1) THEN 1 ELSE 0 END)** , 
    **SUM(CASE WHEN (t1.Direction = 1) THEN 1 ELSE 0 END)** FROM dbo.ZZZ t0,
    YYYY t1 
    WHERE ((((t1.DeviceName IN ('XXXXX')) 
    AND (t1.DateTime >= {ts '2012-09-24 17:26:48.031'})) 
    AND (t1.DateTime < {ts '2012-09-24 18:26:48.031'})) 
    AND (t0.Name = t1.DeviceName)) GROUP BY t0.Name 
    ORDER BY t0.Name ASC