首页 > 解决方案 > Java Spring CRUD 存储库方法“deleteById”不起作用

问题描述

我刚刚遇到了我的 Web Spring 应用程序的问题。我添加了一个方法 deleteById,它在从 CRUDRepository 扩展的 MessageRepo 中声明。这种方法效果很好,它重定向到我的“主”页面,但我的 MySQL 数据库没有任何变化。希望任何人都可以回答我的应用程序有什么问题。随意回答。在我的控制器中往下看这个方法

    @PostMapping("/main/{id}")
    public String delete(@PathVariable(value = "id") Long id) {

        messageRepo.deleteById(id);

        return "redirect:/main";
    }

这就是我的消息在视图中的样子,带有删除任何内容的按钮。

                        <#list messages as message>
                        <div class="task-card">
                            <p class="task-card-p">${message.text}</p>
                            <form method="post" action="/main/${message.id}">
                                <input type="hidden" name="_csrf" value="${_csrf.token}"/>
                                <button type="submit" class="task-card-btn">delete</button>
                            </form>
                        </div>
                        </#list>

那是我的messageRepo。没有任何方法导致我扩展 crudRepo。

public interface MessageRepo extends CRUDRepository<Message, Long> {

}

标签: javamysqlspringhibernatecrud

解决方案


您必须@Transactional在控制器的删除方法上添加注释。您必须导入org.springframework.transaction.annotation.Transactional才能使用此注释。还要确保在 Message 类中添加 getter 和 setter。此解决方案将为您完成工作,但作为一种良好做法,您应该在 Controller 和 Repo 类之间添加一个服务层。将 Service 类中所有进行数据库操作的方法标记为@Transactional.


推荐阅读