mysql 保存时间报错_JPA在MySQL数据库中保存错误的日期
我的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数据库中保存错误的日期相关推荐
- 打开mysql 的时候报错_关于mysql的启动报错处理
昨天使用rpm安装了一个mysql最新版本,在安装的时候因为系统里面自带了mysql5.1的版本.所以我在安装mysql5.5的时候一直报错,故使用yum -y remove mysql*将老版本的安 ...
- mysql用in报错_Mysql子查询IN中使用LIMIT
学习下Mysql子查询IN中使用LIMIT的方法. 这两天项目里出了一个问题,mysql LIMIT使用后报错. 需求是这样的,我有3张表,infor信息表,mconfig物料配置表,maaply物料 ...
- mysql 42642 安装报错_1/5 MySQL入门总结:下载安装
MySQL.msi版本下载: www.mysql.com >DOWNLOADS >Windows >MySQL Installer >mysql-installer-commu ...
- mysql outer join报错_千与千寻-MySQL联结join
MySQL的联查包括外联结,內联结,自然联结,cross联结等等. 1.cross join cross join是对两个表执行笛卡尔运算,显示所有两个表的组合返回m*n行.它可以省略掉cross,或 ...
- mysql初始化实例报错_初始化 mysql时报错
{"data":{"id":"8000-000000437045-0","name":"SEO专题页栏目分发组 ...
- mysql恢复语句报错_php对于mysql恢复数据的时候,只能恢复一条!然后就会报错!但把sql语句直接贴到数据库里面是可以执行的!...
错误如下:YouhaveanerrorinyourSQLsyntax;checkthemanualthatcorrespondstoyourMySQLserverversionfortherights ...
- mysql 预处理语句报错_mysqli与MySQL交互的预处理语句
在编写PHP代码执行SQL语句的时候,很多情况下我们都是相似的语句,只是个别的参数不同,针对这种重复执行相似语句的情况,MySQL4.1版本开始提供了一种名为预处理语句的机制,它可以将整个语句只向My ...
- mysql安装教程博音网_RTSP视频平台EasyNVR使用mysql数据源启动报错unknow drivermysql优化...
原标题:RTSP视频平台EasyNVR使用mysql数据源启动报错unknow driver"mysql"优化 我们上一篇讲了TSINGSEE青犀视频开发的视频平台默认都是使用的s ...
- mysql表恢复报错binlog_mysql数据恢复,利用binlog2sql快速闪回
一.环境设置 1.mysql配置中首先要开启binlog,如没开启,在my.conf 下配置如下参数: server-id = 1 log_bin = /var/log/mysql/mysql-bin ...
最新文章
- 软件视频会议Vidyo体验
- 湖南省第八届大学生计算机程序设计竞赛1115: 最短的名字(模拟)
- extract进程 oracle,ogg extract进程stoped问题
- 【收藏】搭载nfs是客户端新建操作出现read only file system
- mysql数据库英文句子翻译_MySQL文档翻译(八)附英文原文---性能优化概览
- java调用sqlserver存储过程_Java中调用SQLServer存储过程示例
- Windows判断是否为64位程序(C++)
- python的tarfile模块实例 python把文件夹压缩成tar格式文件的例子
- pg数据库表接口和数据导出
- c++拷贝构造函数(深拷贝和浅拷贝)
- python获取当前服务器路径_利用Python实现对Web服务器的目录探测
- 编译原理第三章词法分析知识点思维导图版
- php emoji base64,PHP处理字符中的emoji表情
- 做过的医药类DA及产品宣传单页
- 上万网友自发利用“蔚蓝地图”报污染源
- 在线网站\本地软件拓扑图\复杂网络绘制
- viper4Android md风格,ViPER4Android音效驱动
- 17年App Store最新官方审核指南
- 狂热之下被遗忘的指标—快充倍率
- aws mysql 多区_AWS RDS多可用区+EC2实例跑mysql从库的测试
热门文章
- qt creator 设置按键颜色_Qt编写自定义控件30-颜色多态按钮
- TensorFlow入门篇(一):搭建简单的线性拟合例子
- 选择性搜索(selective search)+opencv实现
- ad19 导出step 没有pcb_PCB设计导出Gerber基本操作及注意事项(三)
- (数组) leetcode 189. Rotate Array
- web框架 http协议
- vim 基础命令大全
- 微信小程序 encryptedData 的解密(JAVA)
- 第二章:在HTML中使用JavaScript
- 完全搞定iframe(框架)里的滚动条