有时,在我的情况下,当我们有一个实体ID列表时,我必须更新一组相关的传递ID实体的字段,我在徘徊,在哪种情况下更好地使用标准方式通过1 -st:加载所有实体和2-nd:调用相关的set()方法:
List<Long> ids = ....;
String par = "example";
List<User> users = USER_DAO.getUsers(ids);
for(User user : users) {
user.setField(par);
}
或另一种方式是通过执行批量更新操作,例如:
Query query = em.createQuery("UPDATE User user SET user.field =:1? WHERE user.id IN : 2?");
int rowCount = query.executeUpdate();
您对该问题有一些了解和/或调查吗? 或者情况,第一种方式比第二种方式更好或者对比?
欢迎所有建议, 谢谢, SImeon
答案 0 :(得分:1)
第二种方式会表现得更好,因为在数据库上执行的sql会更少。在第一种情况下,将为每个用户执行两个sql(一个用于select,一个用于更新)。在第一种情况下,当hibernate将sql映射到对象时,你也会受到性能影响。