如何使用 hibernate +Spring 编写更新查询

How to write update query using hibernate +Spring

不支持 DML 操作

List<LeadsRequest> updateEngg = getEntityManager().createQuery("UPDATE LeadsRequest l set l.status = :status where l.id = :id")
                                .setParameter("status", status).setParameter("id",id).getResultList();
java.lang.IllegalStateException:
org.hibernate.hql.internal.QueryExecutionRequestException: 
Not supported for DML operations

正如 M.Denium 在他的评论中所写,您必须调用 executeUpdate() 而不是 getResultList()

int numberOfChangedEntities = getEntityManager()
    .createQuery("UPDATE LeadsRequest l set l.status = :status where l.id = :id")
    .setParameter("status", status)
    .setParameter("id",id)
    .executeUpdate();

executeUpate() returns 更改的实体数。

正如 java 文档中针对 Query.getResultList 明确指出的那样,这仅适用于 SELECT 语句。它将 return 给定 select 查询的结果,因此不适用于 INSERT/UPDATE/DELETE 查询。

对于 INSERT/UPDATE/DELETE 使用 Query.executeUpdate 方法。这将 运行 DML 语句和 return 受影响的行数。