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

如何用JPA保存SQL DateTime以解决‘字符串与日期时间转换失败’错误?

解决JPA save方法存储SQL datetime时的转换错误

我之前也碰到过一模一样的SQL Server日期转换问题,结合你的代码和报错信息,给你几个可行的解决方案:

1. 先修正代码中的笔误(避免编译级问题)

你的Controller层代码里有个明显的错误:

// 错误:用类名调用实例方法
Record.setCreateDatetime(ts);
// 正确:应该用实例对象调用
record.setCreateDatetime(ts);

虽然这个不是导致日期转换错误的直接原因,但先修正它能避免后续不必要的问题。

2. 匹配数据库列类型与JPA字段映射

SQL Server的datetime和datetime2类型在JDBC映射上有细微差别,如果你数据库里的createDatetime列是datetime类型,建议在Entity的注解里明确指定列定义:

private Timestamp createDatetime;

@Column(name = "createDatetime", columnDefinition = "datetime")
public Timestamp getCreateDatetime() {
    return createDatetime;
}

如果是datetime2类型,就把columnDefinition改成datetime2即可。

3. 改用Java 8+日期API(更推荐的方案)

JPA对Java 8引入的LocalDateTime支持更友好,能彻底避免Timestamp带来的时区和转换兼容性问题,修改Entity如下:

import java.time.LocalDateTime;

private LocalDateTime createDatetime;

@Column(name = "createDatetime")
public LocalDateTime getCreateDatetime() {
    return createDatetime;
}

public void setCreateDatetime(LocalDateTime createDatetime) {
    this.createDatetime = createDatetime;
}

同时Controller里也改成用LocalDateTime生成当前时间:

import java.time.LocalDateTime;

@PostMapping("/record")
public String updateRecord(@RequestParam("createDatetime") Timestamp createDatetime) {
    LocalDateTime now = LocalDateTime.now();
    Record record = new Record();
    record.setCreateDatetime(now);
    recordService.save(record);
    return "success"; // 记得返回合法响应
}

4. 升级SQL Server JDBC驱动版本

旧版本的mssql-jdbc驱动对Timestamp到SQL datetime的转换存在兼容性bug,建议把驱动升级到最新稳定版(比如12.4.2.jre8及以上),以Maven依赖为例:

<dependency>
    <groupId>com.microsoft.sqlserver</groupId>
    <artifactId>mssql-jdbc</artifactId>
    <version>12.4.2.jre8</version>
</dependency>

5. 若需使用前端参数,统一日期格式解析规则

如果之后需要用到前端传入的createDatetime参数,要确保前端传的日期格式符合JDBC解析要求(比如yyyy-MM-dd HH:mm:ss),也可以在Controller里用注解强制指定格式:

@PostMapping("/record")
public String updateRecord(
    @RequestParam("createDatetime") 
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") Timestamp createDatetime
) {
    // 业务逻辑
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 19:53:11