MySQL + Date类型 + 0000-00-00 + Hibernate = ?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了MySQL + Date类型 + 0000-00-00 + Hibernate = ?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1640字,纯文字阅读大概需要3分钟。
内容图文
MySQL + Date类型 + 0000-00-00 + Hibernate = ?
日期:2020年4月15日20点57分
描述:
- 有一MySQL数据库表
- 如图1所示,表中有一Date类型的字段finishedday,该字段的值可能为0000-00-00
- 在数据库中使用SQL语句查询 planid = 2 的记录
注意,该语句查询到了55条记录,而且第一条记录finishedday字段的值为0000-00-00。
- 使用Spring Data JPA 进行相同的操作
@Data
@Entity
@Table(name = "view_plan_taskfinishedday")
@NoArgsConstructor
@AllArgsConstructor
@IdClass(PlanTaskFinishedDayPrimaryKey.class)
public class PlanTaskFinishedDayEntity {
/**
* 计划id
*/
@Id
@Column(name = "planid")
private Integer planId;
/**
* 该计划包含的所有任务完成的日期(年-月-日)
*/
@Id
@Column(name = "finishedday")
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
private Date finishedDay;
}
- 测试
@Test
public void contextLoads() throws Exception {
List<PlanTaskFinishedDayEntity> planTaskFinishedDays = repository.findByPlanId(2);
System.out.println(planTaskFinishedDays.size());
System.out.println(planTaskFinishedDays.get(0));
}
控制台打印:
55
null
- DEBUG
从调试结果看,使用Spring Data JPA 明明也查到了55条记录,为什么第一条记录是null呢?
- Hibernate 0000-00-00 null
在否定了多个猜测之后,我开始思考:是不是查询到数据以后,框架进行ORM的时候有什么特殊操作?Spring Data JPA 是基于Hibernate的,会不会是因为Hibernate对数据库中值为0000-00-00的date类型有特殊的处理呢?
上网查了一下,基本上我的猜测是对的,问题确实出在Hibernate,不过更准确的说法是出现在JDBC,因为Hibernate是基于JDBC的。
突然想到,自己好像从来没有好好看过项目中数据库配置信息,然后赶紧去看了一下,果然......!
内容总结
以上是互联网集市为您收集整理的MySQL + Date类型 + 0000-00-00 + Hibernate = ?全部内容,希望文章能够帮你解决MySQL + Date类型 + 0000-00-00 + Hibernate = ?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。