我的MySQL数据库中有一个表,其中有一个日期列:

+-------------------+---------------+------+-----+---------+----------------+

| Field | Type | Null | Key | Default | Extra |

+-------------------+---------------+------+-----+---------+----------------+

| id | bigint(20) | NO | PRI | NULL | auto_increment |

| type | varchar(50) | NO | | NULL | |

| expiration | date | NO | | NULL | |

我正在将MySQL与JPA一起使用以保存日期。我有一个功能,用户可以选择最终日期范围,它将获得所有日期。

查看此代码(带有一堆SYSO)以尝试查看发生了什么…

@Override

protected DateTime nextReference(DateTime reference) {

System.out.println("Reference: " + reference.toString("dd-MM-YYYY"));

DateTime plus = reference.plusMonths(1);

System.out.println("One month from now: " + plus.toString("dd-MM-YYYY"));

DateTime result = plus.withDayOfMonth(reference.getDayOfMonth());

System.out.println("Final: " + result.toString("dd-MM-YYYY"));

return result;

}

这部分,结果很好:

Reference: 10-01-2017

One month from now: 10-02-2017

Final: 10-02-2017

Reference: 10-02-2017

One month from now: 10-03-2017

Final: 10-03-2017

Reference: 10-03-2017

One month from now: 10-04-2017

Final: 10-04-2017

Reference: 10-04-2017

One month from now: 10-05-2017

Final: 10-05-2017

Reference: 10-05-2017

One month from now: 10-06-2017

Final: 10-06-2017

Reference: 10-06-2017

One month from now: 10-07-2017

Final: 10-07-2017

Reference: 10-07-2017

One month from now: 10-08-2017

Final: 10-08-2017

Reference: 10-08-2017

One month from now: 10-09-2017

Final: 10-09-2017

Reference: 10-09-2017

One month from now: 10-10-2017

Final: 10-10-2017

Reference: 10-10-2017

One month from now: 10-11-2017

Final: 10-11-2017

Reference: 10-11-2017

One month from now: 10-12-2017

Final: 10-12-2017

Reference: 10-12-2017

One month from now: 10-01-2018

Final: 10-01-2018

好的,现在让我们转到保存部分:

@Transactional

private void saveTransactions(List transactions) {

for (Transaction t : transactions) {

System.out.println("Saving: " + t.getExpiration().toString("dd-MM-YYYY"));

Transaction saved = dao.save(t);

System.out.println("Saved: " + saved.getExpiration().toString("dd-MM-YYYY"));

}

}

如您所见,我还添加了一些行来调试它。…在继续输出之前,请检查DAO:

public T save(T entity) {

entityManager.persist(entity);

return entity;

}

没什么大不了的…输出:

Saving: 10-02-2017

Saved: 10-02-2017

Saving: 10-03-2017

Saved: 10-03-2017

Saving: 10-04-2017

Saved: 10-04-2017

Saving: 10-05-2017

Saved: 10-05-2017

Saving: 10-06-2017

Saved: 10-06-2017

Saving: 10-07-2017

Saved: 10-07-2017

Saving: 10-08-2017

Saved: 10-08-2017

Saving: 10-09-2017

Saved: 10-09-2017

Saving: 10-10-2017

Saved: 10-10-2017

Saving: 10-11-2017

Saved: 10-11-2017

Saving: 10-12-2017

Saved: 10-12-2017

如您所见…应该没事吧?一切都在十号。

在我再次继续之前,请检查模型和转换器:

//Attribute

@Convert(converter = JpaDateConverter.class)

private DateTime expiration;

//Converter

public class JpaDateConverter implements AttributeConverter {

@Override

public Date convertToDatabaseColumn(DateTime objectValue) {

return objectValue == null ? null : new Date(objectValue.getMillis());

}

@Override

public DateTime convertToEntityAttribute(Date dataValue) {

return dataValue == null ? null : new DateTime(dataValue);

}

}

现在查看我的数据库:

mysql> select expiration from tb_transaction where notes = 3 and year(expiration

) = 2017;

+------------+

| expiration |

+------------+

| 2017-01-10 |

| 2017-02-10 |

| 2017-03-09 |

| 2017-04-09 |

| 2017-05-09 |

| 2017-06-09 |

| 2017-07-09 |

| 2017-08-09 |

| 2017-09-09 |

| 2017-10-09 |

| 2017-11-10 |

| 2017-12-10 |

+------------+

12 rows in set (0.00 sec)

对于某些奇怪的原因,某些日期保存在9号而不是10号!

无警告,MySQL驱动程序无错误或什么都没有。

请帮助大家!

EDIT 交易类别:

@Entity

@Table(name = "tb_transaction")

public class Transaction implements Cloneable {

@Id

@GeneratedValue(strategy = GenerationType.IDENTITY)

private Long id;

@Enumerated(STRING)

private TransactionType type;

@Convert(converter = JpaDateConverter.class)

private DateTime expiration;

mysql 保存时间报错_JPA在MySQL数据库中保存错误的日期相关推荐

  1. 打开mysql 的时候报错_关于mysql的启动报错处理

    昨天使用rpm安装了一个mysql最新版本,在安装的时候因为系统里面自带了mysql5.1的版本.所以我在安装mysql5.5的时候一直报错,故使用yum -y remove mysql*将老版本的安 ...

  2. mysql用in报错_Mysql子查询IN中使用LIMIT

    学习下Mysql子查询IN中使用LIMIT的方法. 这两天项目里出了一个问题,mysql LIMIT使用后报错. 需求是这样的,我有3张表,infor信息表,mconfig物料配置表,maaply物料 ...

  3. mysql 42642 安装报错_1/5 MySQL入门总结:下载安装

    MySQL.msi版本下载: www.mysql.com >DOWNLOADS >Windows >MySQL Installer >mysql-installer-commu ...

  4. mysql outer join报错_千与千寻-MySQL联结join

    MySQL的联查包括外联结,內联结,自然联结,cross联结等等. 1.cross join cross join是对两个表执行笛卡尔运算,显示所有两个表的组合返回m*n行.它可以省略掉cross,或 ...

  5. mysql初始化实例报错_初始化 mysql时报错

    {"data":{"id":"8000-000000437045-0","name":"SEO专题页栏目分发组 ...

  6. mysql恢复语句报错_php对于mysql恢复数据的时候,只能恢复一条!然后就会报错!但把sql语句直接贴到数据库里面是可以执行的!...

    错误如下:YouhaveanerrorinyourSQLsyntax;checkthemanualthatcorrespondstoyourMySQLserverversionfortherights ...

  7. mysql 预处理语句报错_mysqli与MySQL交互的预处理语句

    在编写PHP代码执行SQL语句的时候,很多情况下我们都是相似的语句,只是个别的参数不同,针对这种重复执行相似语句的情况,MySQL4.1版本开始提供了一种名为预处理语句的机制,它可以将整个语句只向My ...

  8. mysql安装教程博音网_RTSP视频平台EasyNVR使用mysql数据源启动报错unknow drivermysql优化...

    原标题:RTSP视频平台EasyNVR使用mysql数据源启动报错unknow driver"mysql"优化 我们上一篇讲了TSINGSEE青犀视频开发的视频平台默认都是使用的s ...

  9. mysql表恢复报错binlog_mysql数据恢复,利用binlog2sql快速闪回

    一.环境设置 1.mysql配置中首先要开启binlog,如没开启,在my.conf 下配置如下参数: server-id = 1 log_bin = /var/log/mysql/mysql-bin ...

最新文章

  1. 软件视频会议Vidyo体验
  2. 湖南省第八届大学生计算机程序设计竞赛1115: 最短的名字(模拟)
  3. extract进程 oracle,ogg extract进程stoped问题
  4. 【收藏】搭载nfs是客户端新建操作出现read only file system
  5. mysql数据库英文句子翻译_MySQL文档翻译(八)附英文原文---性能优化概览
  6. java调用sqlserver存储过程_Java中调用SQLServer存储过程示例
  7. Windows判断是否为64位程序(C++)
  8. python的tarfile模块实例 python把文件夹压缩成tar格式文件的例子
  9. pg数据库表接口和数据导出
  10. c++拷贝构造函数(深拷贝和浅拷贝)
  11. python获取当前服务器路径_利用Python实现对Web服务器的目录探测
  12. 编译原理第三章词法分析知识点思维导图版
  13. php emoji base64,PHP处理字符中的emoji表情
  14. 做过的医药类DA及产品宣传单页
  15. 上万网友自发利用“蔚蓝地图”报污染源
  16. 在线网站\本地软件拓扑图\复杂网络绘制
  17. viper4Android md风格,ViPER4Android音效驱动
  18. 17年App Store最新官方审核指南
  19. 狂热之下被遗忘的指标—快充倍率
  20. aws mysql 多区_AWS RDS多可用区+EC2实例跑mysql从库的测试

热门文章

  1. qt creator 设置按键颜色_Qt编写自定义控件30-颜色多态按钮
  2. TensorFlow入门篇(一):搭建简单的线性拟合例子
  3. 选择性搜索(selective search)+opencv实现
  4. ad19 导出step 没有pcb_PCB设计导出Gerber基本操作及注意事项(三)
  5. (数组) leetcode 189. Rotate Array
  6. web框架 http协议
  7. vim 基础命令大全
  8. 微信小程序 encryptedData 的解密(JAVA)
  9. 第二章:在HTML中使用JavaScript
  10. 完全搞定iframe(框架)里的滚动条