2016-11-10 116 views
0

SQL語句:休眠更新同一列

UPDATE table SET column = 'new_value' WHERE column = 'old_value' 

(相同的列名)

如何做到這一點的休眠?

回答

0

如果找到多個具有相同列名稱的結果,則可以使用EntityManager.merge(),這可能導致NonUniqueObjectException。

更好地使用NamedQuery或NativeNamedQuery來實現此目的。

0

我的理解是,你會想要執行批量更新。

我建議你參考這個link

您可以使用下面的代碼,以完成這件事。

Session session = sessionFactory.openSession(); 
Transaction tx = session.beginTransaction(); 

String hqlUpdate = "update Customer c set c.name = :newName where c.name = :oldName"; 
int updatedEntities = s.createQuery(hqlUpdate) 
    .setString("newName", newName) 
    .setString("oldName", oldName) 
    .executeUpdate(); 
tx.commit(); 
session.close(); 

請注意鏈接中提到的以下幾點。

在大批量HQL查詢中禁止隱式或顯式聯接。您可以在WHERE子句中使用子查詢,並且子查詢本身可以包含連接。