2016-05-24 37 views
1

很多行我是從這樣的人的數據庫獲取一堆:Hibernate的標準API - 更新一個數據庫查詢

public List<Object[]> getLimitedBunchOfPersons(Integer limit) { 

    Criteria criteria = getSession().createCriteria(Person.class, "person") 
      .setProjection(
        Projections.projectionList() 
         .add(Projections.property("person.personId"), "personId") 
        ) 
      .createAlias("person.status","status") 
      .add(Restrictions.eq("status.statusId", 1L)) 
      .addOrder(Order.asc("person.createdOn")); 

    return criteria.setMaxResults(limit).list(); 
} 

正如我需要加快速度,我只取ID我的實體的。重要的是要注意的是,我操縱大量的行,並且對於一個查詢必須使用maxResults限制。

現在我的問題是,如何輕鬆更新Hibernate Criteria API在一個數據庫中查詢從前面提到的查詢中獲取的所有行?

普通SQL查詢會去是這樣的:

UPDATE PERSON 
SET STATUS = 2, CREATED_ON = CURRENT_TIMESTAMP 
WHERE STATUS = 1; 

需要注意的是更新的方法必須使用相同的orderlimitgetLimitedBunchOfPersons()方法是很重要的。

+1

你可以得到人的ID返回迭代列表在之前的條件查詢中,您可以在更新查詢的條件中傳遞這些ID。 – Ramesh

+0

你給了我一個好主意 – shx

回答

1

對於單個對象,將工作你的代碼後,如下現在

Person per= (Person) criteria.uniqueResult(); 
per.setCreatedOn("crtBy"); 
currentSession.merge(per); 

如果談到在列表中,您可以通過傳遞提到的代碼在你的列表進行迭代