2011-10-22 21 views
5

Soy nuevo para hibernar. Quiero pasar 2 valores de columna y quiero que hibernate devuelva la clave primaria de esa tabla.Valor entero de retorno de Hibernate

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

pero esta lista de retorno del método. ¿Cómo puedo devolver el valor int?

Respuesta

15

uniqueResult() en la consulta. vea here para un ejemplo o lea el api here.

Aquí hay un ejemplo. Reemplace los soportes de lugar según la necesidad de usarlos.

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

Asegúrese de que la consulta le dará solo 1 resultado. Se aplicará NonUniqueResultException, si hay más de un resultado coincidente. – ManuPK

4

Se podría hacer algo como: Utilice el método

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

¿Cuáles son los beneficios de este enfoque? –

0

Aquí es otra forma utilizando addScalar:

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

Ejemplo de una cadena:

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