DML操作不支持JPAREPOSITORITION(DELETE)

发布于 2025-02-06 21:14:25 字数 734 浏览 3 评论 0原文

我一直在尝试创建用户并之后将其作为测试的一部分删除,但是我继续遇到相同的错误 org.hibernate.hql.internal.queryexecutionrequestExexception:即使在DML操作之后不支持在我的存储库和控制器中不断更改代码。

这是我的存储库中的代码:

@Transactional
    @Override
    public void deleteById(long id) {
        Query query = entityManager.createQuery(
                "delete from UserModel as u where u.id=:id"
        ).setParameter("id", id);
        query.getSingleResult();
        query.executeUpdate();
    }

这是我的控制器中的代码:

    @DeleteMapping("/deleteUser")
    public @ResponseBody
    void deleteUser(@RequestParam long id) {
        userRepository.deleteById(id);
        ResponseEntity.ok(null);
    }

I keep trying to create a user and delete it afterwards as a part of my tests, but I keep getting the same error org.hibernate.hql.internal.QueryExecutionRequestException: Not supported for DML operations even after continuously changing the code in both my Repository and Controller.

This is the code in my Repository:

@Transactional
    @Override
    public void deleteById(long id) {
        Query query = entityManager.createQuery(
                "delete from UserModel as u where u.id=:id"
        ).setParameter("id", id);
        query.getSingleResult();
        query.executeUpdate();
    }

This is the code in my Controller:

    @DeleteMapping("/deleteUser")
    public @ResponseBody
    void deleteUser(@RequestParam long id) {
        userRepository.deleteById(id);
        ResponseEntity.ok(null);
    }

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

箹锭⒈辈孓 2025-02-13 21:14:27

我认为,由于query.getSingleresult();行,该例外是触发的,该行试图从删除查询中获取结果(这是查询的更新类型)。

尝试这样更改代码:

@Override
public void deleteById(long id) {
    Query query = entityManager.createQuery(
            "delete from UserModel as u where u.id=:id"
    ).setParameter("id", id);
    query.executeUpdate();
}

I think the exception is triggering due to the query.getSingleResult(); line which is trying to fetch a result from a DELETE query (which is an UPDATE type of query).

Try changing the code like this:

@Override
public void deleteById(long id) {
    Query query = entityManager.createQuery(
            "delete from UserModel as u where u.id=:id"
    ).setParameter("id", id);
    query.executeUpdate();
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文