通过JPA从MySQL获取给定行的行号

时间:2013-07-09 10:55:11

标签: mysql jpa

我正在JPA 2.0中执行以下SQL,它检索给定行的行号。

SELECT
    rownum 
FROM
    (SELECT
        @rownum:=@rownum+1 AS rownum,
        tbl.zone_id 
    FROM
        zone_table tbl,
        (SELECT
            @rownum:=0)t 
    ORDER BY
        tbl.zone_id DESC)t 
WHERE
    zone_id=?

我在JPA中使用以下方法来执行此本机SQL查询。

Object object = entityManager.createNativeQuery("aboveQuery")
                             .setParameter("zone_id", id).getSingleResult();

object.toString()返回

10.0
11.0
12.0
13.0

等基于提供的id。因此,此值无法解析为java.lang.Long。我希望它显示一个没有小数点的值。为什么此查询会产生此结果。它与MySQL而不是JPA更相关。

我正在使用MySQL 5.6.11


修改

我无法验证它在MySQL中返回的数据类型,因为它返回MySQL中没有小数点的结果(此处考虑的主键类型为BIGINT)。

当我在PHP中尝试此查询时,它也生成了没有小数点的结果。所以,我可能认为它必须与JPA做点什么。

1 个答案:

答案 0 :(得分:0)

最有可能返回BigDecimal,它是数据库NUMBER类型的标准类型。如果你想要一个Long,只需将它转换为Number并调用longValue()。

((Number)result).toLong()

如果由于某种原因它是一个字符串,那么只需使用,

new BigDecimal((String)result).toLong()