2013-07-09 25 views
0

我在JPA 2.0中執行以下SQL,它檢索給定行的行號。從MySQL獲取給定行的行號通過JPA

SELECT 
    rownum 
FROM 
    (SELECT 
     @rownum:[email protected]+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做些什麼。

回答

0

它很可能返回一個BigDecimal,它是數據庫NUMBER類型的標準類型。如果你想要一個Long,只需將它轉換爲Number並調用longValue()。

((Number)result).toLong() 

如果由於某種原因,一個字符串就用,

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

在Hibernate中,我們可以通過設置一個標樣,'sessionFactory.getCurrentSession()。createSQLQuery獲得一個特定的類型(」 「)。addScalar(」rownum「,LongType.INSTANCE).setParameter(」id「,id).uniqueResult();'。這可以在JPA中完成嗎?我無法在JPA中找到像'public SQLQuery addScalar(String string,Type type)'這樣的方法。 – Tiny

+0

[This](http://stackoverflow.com/a/6082296/1391249)是一個醜陋的解決方法(儘管我沒有嘗試)。 – Tiny