更新表的多行的最快方法是什么

时间:2018-01-29 10:27:00

标签: java mysql hibernate criteria hibernate-criteria

我有一个名为messages的表,其中包含toUsermessagestatus列。 我想更新特定用户的所有消息状态。

所以,我写了一个像这样的查询,

Session s = DB.getSession();
s.createSQLQuery("UPDATE `message` SET `status`='0' WHERE `toUser`='3'").executeUpdate();
s.close();

然而,有人告诉我,使用纯hibernate方法更新更快更有效(我认为它必须对hibernate池做一些事情),如下所示。

Session s = DB.getSession();
Transaction tr = s.beginTransaction();
Criteria cr = s.createCriteria(Connection.Pojo.Message.class);
cr.add(Restrictions.eq("toUser", 3));
List<Connection.Pojo.Message> l = cr.list();
for (Connection.Pojo.Message msg : l) {
    msg.setStatus((byte) 0);
    s.update(msg);
}
tr.commit();
s.close();

所以,我的问题是更新这些行的最快方法是什么?如果可能,请提供详细的答案。

感谢任何建议。

1 个答案:

答案 0 :(得分:3)

我认为通过纯粹的Hibernate方法&#34;他们的意思是使用HQL update

Session s = DB.getSession();
s.createQuery("UPDATE message m SET m.status=:newStatus WHERE toUser=:userId")
    .setInteger("newStatus", 0)
    .setInteger("userId", 3)
    .executeUpdate();
s.close();

此方法提供的性能与SQL解决方案等效。