Java中Instant存入MySQL后查询显示为null的问题
问题原因
你代码里的核心问题是实体类的creationTimeStamp和VersionTimeStamp字段加了insertable=false属性,这会告诉JPA不将这两个字段的值写入数据库。尽管你在业务代码里设置了Instant的值,但JPA生成INSERT语句时会直接忽略这两个字段,导致数据库中对应字段没有数据,查询时自然返回null。
解决方案
- 移除
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),避免潜在的映射问题。
确认数据库字段类型
因为你用了truncatedTo(ChronoUnit.MICROS)保留微秒精度,MySQL对应的字段类型需要设置为TIMESTAMP(6),这样才能正确存储微秒级时间戳。如果用普通的TIMESTAMP,只会保留到秒级,丢失精度。检查字段名映射
确保实体类@Column的name属性和数据库实际字段名完全一致,包括大小写(如果MySQL配置了大小写敏感的话)。比如数据库字段是creation_timestamp,那name就要对应写成creation_timestamp。
内容的提问来源于stack exchange,提问作者Yuvraj
相关产品推荐
相关产品推荐

