2011-10-22 7 views
5

I am new to hibernate. Voglio passare 2 valori di colonna e voglio ibernare per restituire la chiave primaria di quella tabella.Hibernate Restituisce il valore intero

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

Ma questo metodo restituisce Elenco. Come posso restituire il valore int.

risposta

15

uniqueResult() in Query. vedi here per un esempio o leggi l'api here.

Ecco un esempio. Sostituisci i segnaposto come necessario per usarli.

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

Assicurati che la query ti dia solo 1 risultato. Ti verrà lanciata NonUniqueResultException - se c'è più di un risultato corrispondente. – ManuPK

4

Si potrebbe fare qualcosa di simile: Utilizzare il metodo

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

Quali sono i vantaggi di questo approccio? –

0

Ecco un altro modo usando addScalar:

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

Esempio di stringa:

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