使用Query更新db值或使用merge滚动List?

时间:2014-11-03 12:20:59

标签: java hibernate

我正在使用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);
    }
}

1 个答案:

答案 0 :(得分:1)

  

for(Table table:tables){..}

似乎是一个额外的,因为您可以轻松地使用更新查询。

当表的大小增加时,也可能会导致性能问题,因为它会产生迭代循环的成本。

由于有多种技术,最好采用最佳方法使其变得简单