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

Java中Instant存入MySQL后查询显示为null的问题

问题原因

你代码里的核心问题是实体类的creationTimeStamp和VersionTimeStamp字段加了insertable=false属性,这会告诉JPA不将这两个字段的值写入数据库。尽管你在业务代码里设置了Instant的值,但JPA生成INSERT语句时会直接忽略这两个字段,导致数据库中对应字段没有数据,查询时自然返回null。

解决方案
  1. 移除insertable=false属性
    修改实体类的字段注解,让JPA允许插入这两个字段的值:
@Entity
@Table(name="trade_data")
public class TradeData {

    @Column(name = "creationTimeStamp")
    private Instant creationTimeStamp; // 建议变量名遵循小驼峰命名规范,和数据库字段名保持一致

    @Column(name = "VersionTimeStamp")
    private Instant versionTimeStamp;
}

注:变量名首字母大写不符合Java命名规范,建议改成小驼峰(比如creationTimeStamp),避免潜在的映射问题。

  1. 确认数据库字段类型
    因为你用了truncatedTo(ChronoUnit.MICROS)保留微秒精度,MySQL对应的字段类型需要设置为TIMESTAMP(6),这样才能正确存储微秒级时间戳。如果用普通的TIMESTAMP,只会保留到秒级,丢失精度。

  2. 检查字段名映射
    确保实体类@Column的name属性和数据库实际字段名完全一致,包括大小写(如果MySQL配置了大小写敏感的话)。比如数据库字段是creation_timestamp,那name就要对应写成creation_timestamp。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 06:54:22