2014-11-03 43 views
0

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

既然要更新的值,你可以用查詢輕鬆地做到這一點,沒有理由進行選擇/合併代替。 – Kayaman 2014-11-03 12:23:40

回答

1

的(表表:表){..}

似乎是一個額外的,你可以很容易地用一個更新查詢做。

當表的大小增加時,也可能會導致性能問題,因爲它會產生迭代循環的代價。

由於有多種技術是很好的與最佳一去,使之簡單