java - 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> {
}
解决方案
您必须@Transactional
在控制器的删除方法上添加注释。您必须导入org.springframework.transaction.annotation.Transactional
才能使用此注释。还要确保在 Message 类中添加 getter 和 setter。此解决方案将为您完成工作,但作为一种良好做法,您应该在 Controller 和 Repo 类之间添加一个服务层。将 Service 类中所有进行数据库操作的方法标记为@Transactional
.
推荐阅读
- r - 根据某些条件选择带有 apply() 的函数
- unit-testing - golang 中的测试模式不记录覆盖率
- python - Python Tkinter 和 openpyxl 在按钮按下时返回新行
- amazon-web-services - AWS Pinpoint - 通过 API 将电子邮件模板占位符替换为动态内容
- wso2 - AmazonSQS 流式入站终端节点操作所需的 WSO2 入站终端节点创建类型
- python - 如何在 Django 中过滤并使用类的方法作为条件?
- python - 置信区间 3 维图
- postgresql - 是否有替代方法可以在 PostgreSQL 中使用一个临时表进行更新插入操作?
- npm - 纱线锁文件资源源从 registry.yarnpkg.com 更改为 registry.npmjs.org
- javascript - 多个变量之间的toogle不起作用?