2016-11-10 77 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子句中使用子查询,并且子查询本身可以包含连接。