当前位置: 首页 > 知识库问答 >
问题:

"不支持DML操作"与简单的UPDATE查询

房光临
2023-03-14

当我使用以下HQL时,我得到了DML操作不支持的错误。。。

@Query("UPDATE WorkstationEntity w SET w.lastActivity = :timestamp WHERE w.uuid = :uuid")
void updateLastActivity(@Param("uuid") String uuid, @Param("timestamp") Timestamp timestamp);

是什么导致了这个问题?考虑到我在谷歌上找到的几个结果,这似乎不是一个常见的错误。


共有3个答案

孟智志
2023-03-14

我有完全相同的问题,在我的例子中,我只需要添加@Modifying注释。根据文件:

指示应将查询方法视为修改查询,因为这会更改其执行方式。只有在通过查询注释定义的查询方法上使用时,才会考虑此注释。它不适用于自定义实现方法或从方法名称派生的查询,因为它们已经控制了基础数据访问API,或者指定了它们是否按名称进行修改。需要修改注释的查询包括INSERT、UPDATE、DELETE和DDL语句。

韩阳飙
2023-03-14

我在注释方面也有同样的问题。在搜索和做了一些技巧之后,我终于解决了这个问题。在JPA中使用DML操作时,需要验证以下几个步骤。

>

  • 在所需方法上使用anotation@Modifying(org.springframework.data.jpa.repository.Modifying)@Transactional(org.springframework.transaction.annotation.Transactional)

    使用void作为方法的返回类型。

    e、 g:-

    @Modifying
    @Query("UPDATE ProcedureDTO o SET o.isSelectedByUser =?1")
    @Transactional
    public void getListOfProcedureBasedOnSelection(Boolean isSelected);```
    

  • 米浩穰
    2023-03-14

    检查hibernate用户论坛中的后hibernate hql错误:不支持DML操作。

    很可能是你打电话来的

    querySt.list();
    

    用于您的UPDATE查询。相反,您应该调用

    querySt.executeUpdate();
    
     类似资料:
    • 问题内容: 我写了一个查询来删除我的扩展接口中的某些对象,但是当我执行查询时,它会抛出异常!谁能为我解释一下? 查询: 我收到了此错误,请问,请为我解释一下,谢谢大家:) 例外: 问题答案: 尝试这个: 每当您尝试修改db中的记录时,都必须将其标记为@Transactional和@Modifying,这将指示Spring可以修改现有记录。 存储库方法必须为空,否则将不断抛出异常。

    • 我已经编写了一个查询来删除扩展接口中的一些对象,但是当我执行查询时,它会抛出一个异常!谁能给我解释一下吗? 查询: 我犯了这个错误,请任何人帮我解释一下,谢谢大家:) 例外情况:

    • 作为测试的一部分,我一直在尝试创建一个用户,然后将其删除,但我不断收到相同的错误组织。冬眠hql。内部的QueryExecutionRequestException:即使在我的存储库和控制器中不断更改代码之后,DML操作也不受支持。 这是我的存储库中的代码: 这是我的控制器中的代码:

    • 这以前被问过一次,但解决方案并没有解决问题。我正在创建一个JUnit测试: 上述测试调用的查询是: 错误:

    • 我在springdatajpa中执行更新查询时遇到问题。这是存储库层中的代码: 如您所见,我已经添加了@修改注释,但它仍然抛出“不支持DML操作”的错误,我正在使用Hibernate 5.4。非常感谢任何帮助。

    • 我正在尝试更新数据库中的记录,但收到此错误 这是我的hql尝试 经过研究,我在方法的顶部添加了@修改注释,但错误仍然存在。请问怎么了?