2011-10-22 94 views
5

我是hibernate的新手。我想傳遞2列值,並希望hibernate返回該表的主鍵。休眠返回整數值

String queryString = "select perId from Permission where document.docId=1 and user.id=2"; 
return getHibernateTemplate().find(queryString); 

但是這個方法返回List。 我怎樣才能返回int值。

回答

15

使用uniqueResult()在查詢方法。以here爲例或閱讀api here

這裏是一個例子。根據需要更換佔位符,以便使用它們。

sessionFactory = getHibernateTemplate().getSessionFactory(); 
    Session session = sessionFactory.getCurrentSession(); 
    Query query = session 
      .createQuery("select value from table where ..."); 
    query.setParameters("param1", value1); 
    result = (Type) query.uniqueResult(); 
+1

確保查詢只給你1個結果。它將拋棄NonUniqueResultException - 如果有多個匹配結果。 – ManuPK

4

你可以這樣做:

String sql = "select count(*) from table where ..."; 
BigDecimal count = (BigDecimal) hibernateTemplate.execute(
    new HibernateCallback() { 
    public Object doInHibernate(Session session) throws HibernateException { 
    SQLQuery query = session.createSQLQuery(sql); 
    return (BigDecimal) query.uniqueResult(); 
    }}); 
return count; 
+2

什麼是這種方法的好處? –

0

這裏用另一種方式addScalar:字符串的

Query query = session.createQuery("select value from table where param1 = :param1").addScalar("value", Type); 
query.setParameters("param1", value1); 
result = (Type) query.uniqueResult(); 

例子:

Query query = session.createQuery("select value from table where param1 = :param1").addScalar("value", StandardBasicTypes.STRING); 
query.setParameters("param1", value1); 
result = (String) query.uniqueResult();