jpa有时返回String而不是Date

时间:2014-05-30 15:38:35

标签: java mysql date jpa

我的代码中有一个本机查询,它使用一个分组来汇总mysql表中的日期:

SELECT      
    fecha,      
    q1.id_articulo,      
    a.nombre,      
    [...]
FROM (       
    SELECT
        DATE(mm.ts) AS fecha,
        au.id_articulo AS id_articulo,  
        mm.tipo_mercaderia_movimiento
        [...]       
    FROM mercaderia_movimiento mm       
    LEFT JOIN articulo_unidad au ON mm.id_articulo_unidad=au.id_articulo_unidad       
    WHERE 
        mm.id_articulo_unidad IS NOT NULL       
        AND tipo_mercaderia_movimiento IN ('IND','OUTD')       
        AND au.id_articulo=1611       
        AND DATE(mm.ts) BETWEEN '2013-11-30 00:00:00' AND '2014-05-30 00:00:00'
        AND mm.id_deposito=2
    GROUP BY DATE(mm.ts),mm.tipo_mercaderia_movimiento, au.id_articulo) q1     
LEFT JOIN articulo a ON q1.id_articulo=a.id_articulo     
GROUP BY fecha, q1.id_articulo WITH ROLLUP

正如你在子查询q1中看到的那样,我把“mm.ts”,一个时间戳,并对它做一个DATE(),所以相应的datataype肯定是一个Date,在顶部查询中我只是取字段( fecha),所以数据类型没有变化。 使用“with rollup”生成如下结果表:

+------------+-------------+-------------------------------------+----
| fecha      | id_articulo | nombre                              | ...
+------------+-------------+-------------------------------------+----
| 2014-05-30 |        1611 | LOMO MAS DE 5 - LOMO + 5 L. C/C IWP | ...
| 2014-05-30 |        NULL | LOMO MAS DE 5 - LOMO + 5 L. C/C IWP | ...
| NULL       |        NULL | LOMO MAS DE 5 - LOMO + 5 L. C/C IWP | ...
+------------+-------------+-------------------------------------+----

所以fecha是Date或null。确保我在我的代码中有这一行:

Date fecha = row[0]!=null ? (Date) row[0] : null;

当我使用jpa本机查询执行查询时,我有时会得到

  

java.lang.ClassCastException:java.lang.String无法强制转换为java.util.Date

我很确定只有当表只包含一个fecha和null值时才存在问题(如上例所示),而不是如果我有多个值。

这个问题已知吗?我该怎么做才能确保将fecha作为Date返回?

谢谢!

0 个答案:

没有答案