You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Data JPA中@DeleteMapping用Timestamp参数无法删除数据库行问题

排查方向及核心问题

优先级最高的可直接验证的问题

  • 方法名不匹配问题:Service接口定义的按日期删除方法名为deleteAdvisorTimeoffByDate,但实现类中重写的方法名为deleteAdvisorTimeoffByDates(多了后缀s)。如果你的工程能正常启动无编译报错,说明接口中额外定义了带s的同名方法,Controller实际调用的是接口中未实现的空方法,自然不会执行删除逻辑。
  • 请求参数逻辑错误:你示例请求中datetimeStart=2021-12-25 13:00:00、datetimeEnd=2021-10-25 14:00:00,开始时间晚于结束时间,数据库中几乎不可能存在符合该时间范围的业务数据,自然无数据被删除。
  • Timestamp参数绑定错误:Spring MVC默认没有配置全局日期格式化规则时,无法直接将2021-12-25 13:00:00格式的字符串自动转换为Timestamp类型,你拿到的参数大概率是null或格式错误的时间,无法匹配数据库中的数据。

进一步排查步骤

  1. 开启JPA SQL打印:在配置文件中添加spring.jpa.show-sql=true、spring.jpa.properties.hibernate.format_sql=true、logging.level.org.hibernate.type.descriptor.sql.BasicBinder=trace,观察控制台输出的DELETE语句及实际绑定的参数值,确认参数是否和请求传入的值一致。
  2. 校验时间时区一致性:确认数据库中存储的DATETIME_START、DATETIME_END字段的时区和你请求传入的时间时区是否一致,比如数据库存的是UTC时间,你传的是东八区时间会相差8小时,无法匹配到对应数据。
  3. 给Timestamp参数添加格式化注解:在Controller的参数前添加@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")注解,强制指定日期转换格式,避免参数解析错误。示例:
protected PostResponse deleteAdvisorTimeoffByDate(@PathVariable Long advisor, 
    @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") Timestamp datetimeStart, 
    @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") Timestamp datetimeEnd)
  1. 检查复合主键的equals、hashCode实现:确保你实体类中注释的两个方法正确实现了三个主键字段的对比,避免JPA识别实体匹配错误。

内容的提问来源于stack exchange,提问作者AlgoTrading

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 03:15:05