Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
hibernate在一条语句中更新多条记录_Hibernate_Row - Fatal编程技术网

hibernate在一条语句中更新多条记录

hibernate在一条语句中更新多条记录,hibernate,row,Hibernate,Row,我有一个表,想更新每个ID的每个工资记录 ID FirstName Salary 10 A 10,000 15 B 5000 17 C 7000 19 D 8000 但实际情况是每行执行update语句。假设我有1000条记录,那么update语句执行了1000次。有没有更好的方法可以实现这一点。 我做的是 RetriveDataMethod

我有一个表,想更新每个ID的每个工资记录

ID      FirstName     Salary
10      A             10,000
15      B             5000
17      C             7000
19      D             8000
但实际情况是每行执行update语句。假设我有1000条记录,那么update语句执行了1000次。有没有更好的方法可以实现这一点。 我做的是

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();
}

谢谢

如果您使用条件和/或HQL/JPAQL语句执行所有操作,您将允许Hibernate缓存这些语句。这样,当会话被刷新或提交时,它将发出所有更新语句,这样更有效


您可能还想问,在每次更新之后执行commit()是否是一个好主意

Thanks@robertvoliva您能再解释一下吗?“这样,当会话刷新或提交时,它将发出所有更新语句”它仍将发出1000条更新语句,但它将使用相同的数据库连接和事务来实现。您不会经历连接数据库和启动/提交事务1000次(仅一次)的开销。再次感谢@robertvoliva。在我的代码中,我可以编写session.commit(),我还需要更改代码,以便同一个会话,同一个事务将用于1000条记录。(它不会为每1000条记录创建一个新的事务)简单的第一步是将它放在RetrieveDataMethod的while循环之外。如果我将updateDataMethod()放在在RetrieveDataMethod()的外部while循环中,我无法获得每个ID和每个薪水。