2008-09-12 40 views
33

Tôi đang cố gắng chỉ lấy danh sách id của đối tượng bob thay vì danh sách bob. Đó là ok với một yêu cầu HQL, nhưng tôi sẽ biết nếu nó có thể sử dụng tiêu chí?Làm thế nào để sử dụng các tiêu chí ngủ đông để chỉ trả lại một phần tử của một đối tượng thay vì toàn bộ đối tượng?

Một ví dụ:

final StringBuilder hql = new StringBuilder(); 
hql.append("select bob.id from ") 
    .append(bob.class.getName()).append(" bob ") 
    .append("where bob.id > 10"); 

final Query query = session.createQuery(hql.toString()); 
return query.list(); 

Trả lời

45

Tôi nghĩ bạn có thể làm điều đó với dự báo, một cái gì đó giống như

Criteria.forClass(bob.class.getName()) 
     .add(Restrictions.gt("id", 10)) 
     .setProjection(Projections.property("id")) 
     ); 
8

hoặc setProjection (Projections.id())

16

Tương tự, bạn cũng có thể:

Criteria criteria = session.createCriteria(bob.class); 

criteria.add(Expression.gt("id", 10)); 

criteria.setProjection(Projections.property("id")); 

criteria.addOrder(Order.asc("id")); 

return criteria.list(); 
1

Một tùy chọn khác (mặc dù một chút un hibernate-esque) là sử dụng "liệu" sql, như thế này:

List<Long> myList = session.createSQLQuery("select single_column from table_name") 
      .addScalar("single_column", StandardBasicTypes.LONG).list(); 
-1

Bạn có thể làm điều đó như thế này

bob bb=null; 

    Criteria criteria = session.createCriteria(bob.class); 
    criteria.add(Restrictions.eq("id",id)); 

    bb = (bob) criteria.uniqueResult(); 

như hạn chế bạn có thể thêm điều kiện của mình

+1

Không phải là câu trả lời cho câu hỏi, nhưng nó có ích cho tôi –

Các vấn đề liên quan