2015-01-12 56 views
2

我有一個HQL查詢,但它有許多條件。所以我決定使用Hibernate Criteria。使用Hibernate Criteria投影限制選定字段

這裏是我的查詢:

select distinct u.employee.id,u.employee.name,u.employee.address.phone from user u. 

我嘗試了用標準Project.property。但它給出了一個錯誤。是否有可能爲這個查詢編寫Hibernate Criteria?

+2

請包括錯誤輸出。順便說一下,是的,這是可能的。 – meskobalazs

+0

@meskobalazs你能解釋一下嗎?我是新的休眠 – rohi

+1

你說它給出了一個錯誤,在哪裏?你也可以告訴我們你的標準查詢嗎? – meskobalazs

回答

2
Criteria cr = session.createCriteria(User.class) 
    .setProjection(Projections.projectionList() 
     .add(Projections.property("employee.id"), "id") 
     .add(Projections.property("employee.name"), "Name")); 

    List<User> list = cr.list(); 

更多的例子。

Criteria cr = session.createCriteria(Employee.class); 

//獲得總行數。

cr.setProjection(Projections.rowCount()); 

//得到一個屬性的平均值。

cr.setProjection(Projections.avg("salary")); 

//獲得一個屬性的不同數量。

cr.setProjection(Projections.countDistinct("firstName")); 

//獲得最大的屬性。

cr.setProjection(Projections.max("salary")); 

//獲得最小屬性。

cr.setProjection(Projections.min("salary")); 

//得到一個屬性的總和。

cr.setProjection(Projections.sum("salary")); 
+0

這不是我所期望的。我需要知道如何使用字段user.employee.address.phone – rohi

+0

@rohi'.add(Projections.property(「user.employee.address.phone」),「phone」));' –

1
List<User> users = (List<User>) dbSession.createCriteria(User.class) 
      .add(Restrictions.eq("nameOfFieldInUserClass", value))     
      .list(); 

「nameOfFieldInUserClass」 是在用戶限制欄的名稱,在DB沒有名字列。

和不同,你可以使用

setProjection(Projections.distinct(Projections.property("nameOfField")));