是否在一个Hibernate查询中更新多个列?
我有以下HQL:是否在一个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
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();