Ros*_*ala 5 java mysql hibernate criteria hibernate-criteria
我有一个名为表messages含toUser,message和status列.我想更新特定用户的所有消息状态.
所以,我写了这样一个查询,
Session s = DB.getSession();
s.createSQLQuery("UPDATE `message` SET `status`='0' WHERE `toUser`='3'").executeUpdate();
s.close();
Run Code Online (Sandbox Code Playgroud)
但后来我被告知使用纯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();
Run Code Online (Sandbox Code Playgroud)
那么,我的问题是更新这些行的最快方法是什么?如果可能,请提供详细的答案.
谢谢你的建议.
我认为“纯 Hibernate 方法”意味着使用HQL 更新:
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();
Run Code Online (Sandbox Code Playgroud)
此方法提供与 SQL 解决方案相当的性能。
| 归档时间: |
|
| 查看次数: |
1606 次 |
| 最近记录: |