2011-10-22 39 views
5

Tôi mới dùng chế độ ngủ đông. Tôi muốn vượt qua 2 giá trị cột và muốn ngủ đông để trở về khóa chính của bảng đó.Hibernate Trả lại giá trị số nguyên

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

Nhưng phương thức này trả về Danh sách. Làm cách nào tôi có thể trả về giá trị int.

Trả lời

15

Sử dụng phương pháp uniqueResult() trong truy vấn. xem here để biết ví dụ hoặc đọc api here.

Đây là một ví dụ. Thay thế người giữ chỗ khi cần sử dụng chúng.

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

Đảm bảo rằng truy vấn sẽ chỉ cung cấp cho bạn 1 kết quả. Nó sẽ trow NonUniqueResultException - nếu có nhiều hơn một kết quả phù hợp. – ManuPK

4

Bạn có thể làm một cái gì đó như:

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

những lợi ích của phương pháp này là gì? –

0

Dưới đây là một cách khác sử dụng addScalar:

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

Ví dụ về String:

Query query = session.createQuery("select value from table where param1 = :param1").addScalar("value", StandardBasicTypes.STRING); 
query.setParameters("param1", value1); 
result = (String) query.uniqueResult(); 
Các vấn đề liên quan