hibernate java.util.date 精度_Hibernate映射中 date类型 和 javabean里的java.util.Date变Timestamp的问题...
发布日期:2021-06-24 12:50:55 浏览次数:2 分类:技术文章

本文共 1676 字,大约阅读时间需要 5 分钟。

近期写了一个增删改查的东东,其中修改功能涉及到时间的比较,这个地方发现了一个问题,这个问题在我们的开发环境不存在,但是经过版本管理员发布int之后就出来了。后来发现这个确实也涉及到jdk版本的问题,但是确实也是个问题。

首先,在数据库里定义的该时间字段类型是date类型,Hibernate里.hbm.xml文件中orm映射的是 java.util.Date,javabean里也是java.util.Date,hbm.xml里的代码如下:

起期

止期

当修改功能进行操作时,从页面传入后台的数据跟从数据库里的查询出来的数据进行比较,由于这两个时间字段是必输字段,我直接用了java.util.Date的compareTo函数来进行比较,这个是问题所在,在jdk1.5版本之后的jdk进行编译,就会出现问题。

//if(objOld.gettEndDate().compareTo(obj.gettEndDate())!=0){//objOld.settEndDate(obj.gettEndDate());//}

后来我分析了问题所在:首先从数据库里查询的这个时间字段的类型,已经被Hibernate默认转化为:java.sql.Timestamp类型,而从数据获取的数据经过在页面展示之后,传回来的时间字段则是正常的javabean里定义的java.util.Date类型,在使用compareTo进行比较的时候会抛出异常,因为这已经是两个不同的类型在比较了。

这个问题的解决方法有好几种吧,可以把Timestamp转成Date, 也可以把Date转成Timestamp,然后比较,我用的方法是直接把两个时间字段都转化成固定格式的String,然后进行比较。

1、都转成String  再比较:

String tEndDate = new SimpleDateFormat("yyyy-MM-dd").format(objOld.gettEndDate());

String tEndDateNew= new SimpleDateFormat("yyyy-MM-dd").format(obj.gettEndDate());if(!tEndDate.equals(tEndDateNew)){

objOld.settEndDate(obj.gettEndDate());

}

2、Timestamp转成Date

Timestamp t = newTimestamp(System.currentTimeMillis());

Date d= new Date(t.getTime());

3、Date转成Timestamp

//SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd:HH:mm:ss");

String tsStr=new SimpleDateFormat("yyyy-MM-dd:HH:mm:ss").format(objOld.gettEndDate());

Timestamp ts= Timestamp.valueOf(tsStr);

或者  用new Timestamp((new Date()).getTime())  ,这个还没有试过。

关于为什么从数据库里查询的这个时间字段的类型会被Hibernate默认转成Timestamp类型,查了不少资料,都没有能给出让人信服的理由的,

在查资料的时候,发现了几篇看着挺不错的文章,可以学习下:

java.util.Date、java.sql.Date、java.sql.Time、java.sql.Timestamp区别和总结: http://blog.csdn.net/xiancaieeee/article/details/8099184

JDK 1.4升级至JDK5 JDK6的两个关键问题BigDecimal、java.sql.Date   :  http://shuwen.iteye.com/blog/1179826

转载地址:https://blog.csdn.net/weixin_32825467/article/details/115064871 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:java graph结构_graph: 一个对“图”数据结构进行操作的通用库
下一篇:java中文逗号替换成英文逗号_织梦中文逗号怎么自动替换成英文逗号

发表评论

最新留言

表示我来过!
[***.240.166.169]2024年04月14日 09时32分29秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

Android技术篇!只需一篇文章吃透Android多线程技术,成功定级腾讯T3-2 2019-04-29
Android技术篇!微信小程序页面跳转方法总结,3面直接拿到offer 2019-04-29
android进阶之光!一位Android大牛的BAT面试心得与经验总结,持续更新中 2019-04-29
Android开发技巧!Android面试知识点总结宝典助你通关!终局之战 2019-04-29
Android开发技术总结!BTAJ大厂最新面试题汇集,不吃透都对不起自己 2019-04-29
Android开发知识体系!3年Android开发工程师面试经验分享,先收藏了 2019-04-29
Android开发社招面试经验:渣本毕业两年经验,附架构师必备技术详解 2019-04-29
android开发需要学什么!大佬手把手教你如何仿写出大厂的APP,深度好文 2019-04-29
android性能优化工具!我在华为做Android外包的真实经历!先收藏了 2019-04-29
android性能调优!阿里面试100%会问到的JVM,已拿offer入职 2019-04-29
安卓app开发书籍!掌握这些Android开发热门前沿知识,面试心得体会 2019-04-29
安卓app开发教程pdf!Android组件化架构实践,值得收藏! 2019-04-29
安卓app开发架构!让你明明白白的使用RecyclerView,满满干货指导 2019-04-29
安卓app软件开发教程!为什么Flutter能最好地改变移动开发?系列篇 2019-04-29
安卓framework层开发!Android高级工程师必看系列,建议收藏 2019-04-29
安卓framework层开发!给后辈的一点建议,持续更新中 2019-04-29
安卓ios开发培训!华为Android面试真题解析,高级面试题+解析 2019-04-29
安卓sdk开发!阿里面试100%会问到的JVM,架构师必备技能 2019-04-29
安卓ui开发语言!Activity的6大难点,你会几个?一线互联网公司面经总结 2019-04-29
android学习路线!字节跳动Android三面凉凉,社招面试心得 2019-04-29