Hibernate插入Oracle数据库时间丢失时分秒问题解决

        在公司项目开发过程中,发现Hibernate框架在插入时间进入oracle数据库时丢失了时分秒,在debug时,看java代码上时间是有时分秒的,但再看数据库就莫名其妙的丢失了,郁闷了好久,现在和大家分享也顺便记录一下这个问题当时解决的办法:


       分析

   1,java里使用的Date类型是java.util.Date,而数据库识别的是java.sql.Date,在数据库识别时转换丢掉原类型的时分秒,因为java.sql.Date只有日期没有时分秒,java.sql.Time只有时分秒没有日期,因此我们最终选择了其子类java.sql.Timestamp作为时间类型,既有日期又有时分秒

(PS:  java.util.Date和java.sql.Date可以互转,具体可参考java API)


 2,当我们只改了java代码里的日期类型时,发现还是不行,后来发现,数据库表字段的类型也有影响,原先使用的是DATE,后来把字段类型改为DATETIME就完美的解决了java与数据库时间类型的匹配

  让我看一下oracle的DATE与DATETIME的区别就能明白了:


date datetime区别如下:
(1)格式不同:
date :表示年月日,如YY-MM-DD
datetime: 表示年月日和时间信息,如YY-MM-DD HH:MM:SS

(2)时间范围不同如下:
date -- > '1000-01-01' to '9999-12-31'.
datetime --> '1000-01-01 00:00:00' to '9999-12-31 23:59:59'.


    解决方案

  从上面分析可知,解决的方面有两个(当然可能只适合部分这样问题,具体问题还得具体分析):

1,将java代码里的日期类型换成java.sql.Timestamp

2,将数据库表字段类型换为DATETIME

你可能感兴趣的:(Hibernate,数据库,Java,hibernate,数据库)