2012-03-27 10 views
1

Ich habe Tabelle und will für jede ID jedes Gehalt Datensatz aktualisierenmehrere Datensätze Updates in einer einzigen Anweisung überwintert

ID  FirstName  Salary 
10  A    10,000 
15  B    5000 
17  C    7000 
19  D    8000 

Aber was geschieht Update-Anweisung wird für jede row.Suppose ausgeführt ich 1000 Datensätze habe dann aktualisieren Die Anweisung wird 1000 Mal ausgeführt. Gibt es eine bessere Möglichkeit, dies zu erreichen? ich als tue,

RetriveDataMethod() 
{ 
List listIdSalary = retriveIdAndSalary(); 
Iterator itr =listIdSalary.iterator(); 
while(itr.hasNext()){ 
    Object[] idStr = (Object[]) itr.next(); 
    String id = (String)idStr[0]; 
    String salary = (String)idStr[1]; 
    updateDataMethod(id,salary) 
} 
} 

updateDataMethod(String id,String salary) 
{ 
String s = "update table set salary=:salry where id=:id" 
Query q = session.createQuery(s); 
q.setString("salary",salary); 
q..setString("id",id); 
q.executeUpdate(); 
session.commit(); 
} 

Dank

Antwort

0

Wenn Sie alles tun, Kriterien und/oder HQL/JPAQL Aussagen verwenden, ermöglicht es Ihnen, Hibernate, diese Aussagen cachen auf. Auf diese Weise werden alle Aktualisierungsanweisungen ausgegeben, wenn die Sitzung gelöscht oder festgeschrieben wird. Dies ist effizienter.

Sie können auch fragen, ob es eine gute Idee ist, ein Commit() nach jedem Update durchzuführen.

+0

Danke @ robertvoliva Können Sie bitte ein wenig mehr erklären .. "Auf diese Weise, wenn die Sitzung gespült oder festgeschrieben wird, wird es alle Ihre Update-Anweisungen ausgeben" – user1295746

+0

Es wird immer noch 1000 Update-Anweisungen, aber es wird so mit der gleichen Datenbankverbindung und Transaktion. Sie werden nicht den Overhead der Verbindung zur Datenbank durchgehen und eine Transaktion 1000 mal starten/committen, nur einmal. – robertvoliva

+0

Nochmals vielen Dank @robertvoliva. In meinem Code dann, wo ich session.commit() schreiben kann und auch muss ich Code ändern sothat gleiche Sitzung, die gleiche Transaktion wird für 1000 Datensätze verwendet werden. (Es wird nicht für jede 1000 Datensätze neu erstellen) – user1295746

Verwandte Themen