我使用以下方法更新数据库中的数据。
String hql = "UPDATE EmployeeSalary set salary = :sl,"
+ "monthYr=:dt "
+ "WHERE id =:id and client.id=:cid";
for (EmployeeSalary e : eList) {
Query query = session.createQuery(hql);
query.setParameter("sl", e.getSalary());
query.setParameter("dt", e.getMonthYr());
query.setParameter("id", e.getId());
query.setParameter("cid", e.getClient().getId());
int result = query.executeUpdate();
System.out.println("result is " + result);
if (eAttList.size() % 20 == 0) {
session.flush();
session.clear();
}
}
代码是否有任何问题。
执行时显示
结果为0
如何解决上述问题。
答案 0 :(得分:1)
可以在批量HQL查询中指定“隐式或显式的连接语法形式”。子查询可以在where子句中使用,子子查询本身可以包含连接。
您的查询似乎违反了此规则:client.id=:cid
是客户端实体的隐式连接。
请注意,你的生活很艰难。您可以通过会话中的ID(使用Session.get()
)简单地获取实体,然后更新它。更新查询对于一次更新多行非常有用。