2012-04-22 23 views
1

如何計算Hibernate中MySQL表中的記錄?我嘗試了以下HQL,但它不起作用。如何在Hibernate中進行計數(*)?

SELECT COUNT(*) FROM MEMBERS WHERE `username` =:USERNAME OR `email` =:EMAIL 

它在下面的方法使用:

public boolean checkInfos() { 
    Session newSession = NewHibernateUtil.getSessionFactory().openSession(); 
    int count = (Integer) newSession.createSQLQuery("SELECT COUNT(*) FROM MEMBERS WHERE `username` ='admin' OR `email` ='admin'").uniqueResult(); 

    if (count >= 1) { 
     return false; 
    } else { 
     return true; 
    } 
} 

回答

0

我猜你需要的是

Query q = newSession.createSQLQuery("SELECT COUNT(*) FROM MEMBERS WHERE username = ? OR email =?"); 
q.setParameter(1, "your username"); 
q.setParameter(2, "your email"); 
+0

我也試過這個,但它給了不同的erros先生。 – 2012-04-22 19:23:21

+2

@Kaan:請給錯誤多一點愛。它們包含你的問題的答案。你不應該忽視錯誤,就好像它們是垃圾一樣。如果你不明白什麼樣的錯誤試圖告訴你,那麼你應該編輯你的問題幷包含它們,這樣我們就可以用外行的話來解釋它們。 – BalusC 2012-04-22 23:30:17

0

Select count(*)返回Long,而不是一個Integer

還有一件事:您正在使用的反引號不被每個數據庫所接受。

順便說一下,您也可以在HQL中使用count(*)。這意味着,您可以使用createQuery而不是createSQLQuery。 HQL的一個優點是,它可以從一個數據庫移植到另一個數據庫,SQL語句並非總是如此。

0

您也可以通過使用標準來實現此目的。

private Number getCount(){ 
    Criteria criteria = session.createCriteria(Members.class); 
    criteria.add(Restrictions.or(Restrictions.eq("username", "admin"), Restrictions.eq("email","admin"))); 
    criteria.setProjection(Projections.rowCount()); 
    return (Number) criteria.list(); 
} 
相關問題