我正在使用Java和Hibernate对数据库进行更改,但是我遇到了一些让我的好奇心高涨的东西。据我所知,以下两种方法在数据库上的结果完全相同。除性能外是否有任何差异。对我来说,从表中提取行列表并循环遍历列表似乎有点不必要,只需用查询更改值即可。
您对此有何看法?
private EntityManager em;
public void updateValue(String id, String value) {
em.createQuery(" UPDATE Table table " +
" SET value = :newValue," +
" WHERE id LIKE :newId",
Table.class)
.setParameter("newId", id)
.setParameter("newValue", value);
}
public void updateValue(String id, String value) {
List<Table> tables =
em.createQuery("SELECT table " +
" FROM Table table" +
" WHERE id LIKE :newId",
Table.class)
.setParameter("newId", id)
.getResultList();
for (Table table : tables) {
table.setValue(value);
em.merge(table);
}
}
答案 0 :(得分:1)
for(Table table:tables){..}
似乎是一个额外的,因为您可以轻松地使用更新查询。
当表的大小增加时,也可能会导致性能问题,因为它会产生迭代循环的成本。
由于有多种技术,最好采用最佳方法使其变得简单