hibernate在一条语句中更新多条记录
我有一个表,想更新每个ID的每个工资记录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 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和每个薪水。