【问题标题】:How to write update query using hibernate +Spring如何使用hibernate + Spring编写更新查询
【发布时间】:2019-12-15 03:32:19
【问题描述】:

不支持 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

【问题讨论】:

  • 请说明您的尝试,并提出明确的问题。寻求帮助:How to ask a good question
  • getResultList 显然不起作用,即对于SELECT 查询,请改用executeUpdate

标签: mysql spring hibernate hql


【解决方案1】:

正如 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() 返回已更改实体的数量。

【讨论】:

    【解决方案2】:

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

    对于INSERT/UPDATE/DELETE,使用Query.executeUpdate 方法。它将运行 DML 语句并返回受影响的行数。

    【讨论】:

      猜你喜欢
      • 2022-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-20
      • 2012-12-02
      • 1970-01-01
      • 2021-10-27
      • 1970-01-01
      相关资源
      最近更新 更多