2017-06-26 65 views
0

我一直在嘗試使用休眠計數行數,但我一直收到「0」記錄。這裏是我的代碼使用休眠計數行或記錄

public static Integer getLastDrugId(){ 
    Integer result = 0; 
    Session session = HibernateUtil.getSessionFactory().openSession(); 
    Transaction tx = null; 
    try{ 
     tx = session.beginTransaction(); 
     String hql = "SELECT count(*) FROM Drug"; 
     Query query = session.createQuery(hql); 
     Integer e = (Integer) query.iterate().next(); 
     if (e != null) { 
      result = 1; 
     } 

    } catch (Exception ex) { 
     if (tx != null) { 
      tx.rollback(); 
     } 
    } finally { 
     session.close(); 
    } 
    return result; 
} 

我在某處錯了嗎?

+0

你檢查,如果你得到一個異常?你可能應該添加一個記錄器,讓它在你的catch塊中打印棧跟蹤,不要錯過它。 –

+0

我在某種程度上是新的計數行。但是在打印stacktrace後,我得到了這個錯誤「java.lang.Long不能轉換爲java.lang.Integer」。但我並沒有在我的代碼中使用Long。 –

+0

看起來像你的查詢返回一個Long,所以你必須按照這樣的方式接收它。如果需要將結果作爲Integer,則可以通過在查詢返回的Long上調用intValue()來手動進行轉換。 –

回答

1

替換此行:

Integer e = (Integer) query.iterate().next(); 

蒙山這樣的:

Long e = (Long) query.iterate().next(); 
+0

謝謝!這工作起初,但現在它不斷返回只是一個記錄,我有兩個記錄 –

+0

如何計數(*)返回兩個記錄(在上面的查詢)? 'SELECT count(*)FROM Drug;'在數據庫中運行並自行查看。 –

+0

林新來這個,所以我真的不明白它是如何工作的。好吧,我想返回多個記錄。我想使用記錄的數量作爲ID,就像我有一個記錄,下一個ID應該是「2」。 –