我的代码中有一个本机查询,它使用一个分组来汇总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返回?
谢谢!