使用相同列的Hibernate更新

时间:2016-11-10 11:37:29

标签: java mysql sql hibernate

SQL语句:

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

(同一列名)

如何在Hibernate中执行此操作?

2 个答案:

答案 0 :(得分:0)

您可以使用EntityManager.merge(),如果找到多个具有相同列名的结果,则可能导致NonUniqueObjectException。

最好使用NamedQuery或NativeNamedQuery来实现这一点。

答案 1 :(得分: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子句中使用子查询,子查询本身可以包含连接。