ich aus der Datenbank Bündel von Personen wie folgt holen:Hibernate Criteria API - update viele Zeilen mit einer Datenbankabfrage
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();
}
Da musste ich die Dinge beschleunigen, habe ich nur geholt IDs meiner Einheit. Wichtig zu beachten ist, dass ich mit einer großen Anzahl von Zeilen manipuliere und für eine Abfrage die maxResults
Einschränkung verwenden musste.
Jetzt ist mein Problem, wie leicht mit Hibernate Criteria API in einer Datenbank Abfrage alle abgerufenen Zeilen von zuvor genannten Abfrage zu aktualisieren?
Plain SQL-Abfrage würde wie folgt gehen:
UPDATE PERSON
SET STATUS = 2, CREATED_ON = CURRENT_TIMESTAMP
WHERE STATUS = 1;
Es ist wichtig, dass Update-Methode gleiche order
und limit
als getLimitedBunchOfPersons()
Methode verwenden müssen, um beachten.
Sie können die IDs von Personen zurückerhalten in vorherigen Kriterien Abfrage und Sie können diese IDs übergeben, in dem Zustand der Update-Abfrage. – Ramesh
Du hast mir eine tolle Idee gegeben – shx