是否在一个Hibernate查询中更新多个列?

是否在一个Hibernate查询中更新多个列?,hibernate,nhibernate,hql,Hibernate,Nhibernate,Hql,我有以下HQL: String hql = "UPDATE Buchung as b " + "set STORNO = :Storno " + "where ID = :BuchungID"; 是否可以更新HQL中的多个列?例如: String hql = "UPDATE Buchung as b " + "set STORNO = :Storno " + "set NAME = :N

我有以下HQL:

String hql = "UPDATE Buchung as b " +
             "set STORNO = :Storno " +
             "where ID = :BuchungID";
是否可以更新HQL中的多个列?例如:

String hql = "UPDATE Buchung as b " +
              "set STORNO = :Storno " +
              "set NAME = :Name " +
               ......  
              "where ID = :BuchungID";

我知道如何在MSSQL中做到这一点,但我不知道如何在Hibernate中做到这一点。

在这种情况下,HQL与SQL没有什么不同。只需使用逗号分隔列:

String hql = "UPDATE Buchung as b set " +
          "STORNO = :Storno," +
          "NAME = :Name " +
           ......  
          "where ID = :BuchungID";

该语法与SQL语法类似,但使用映射的字段/属性而不是列:

update Buchung set storNo = :storno, name = :name where id = :buchungID
请注意,如果目标是修改单个实体实例,则最好这样做

Buchung b = (Buchung) session.get(Buchung.class, buchungId);
b.setStorNo(newStorno);
b.setName(newName);
在正常情况下,必须有“事务”才能运行查询

    Transaction transaction = null;
transaction = session.begintransaction();
...
transaction.commit();

@JB指定如何处理此情况
更新员工集empName=:empName,address=:address where dept=:dept
。我没有根据id进行更新。那么更新查询更有效。不过,您可以使用select查询加载所有匹配的实体,并在循环中更新它们。请注意,直接更新查询会绕过一级缓存。
    Transaction transaction = null;
transaction = session.begintransaction();
...
transaction.commit();