编译器逆向工程小问题

在ssh项目开发中,对于持久化类的代码编写,相信很多人都手敲过,在初期阶段大家都是这样的。但是在实战项目中往往不会手动自己去写那段private name等等的属性字段,也不愿意去写他的get和set方法(编译器带有这个功能)。后期阶段大家都会使用逆向工程的方式。这个出错的几率往往可以降到0,机器的工作方式是很正确的。但是这偏偏给我撞上了。

         不扯远了,步入正题。环境配置,数据库sqlserver,编译器Myeclipse8.5,B/S开发,ssh框架。

背景,对于一个300多张表的系统,我相信没人会想到手写hibernate映射文件,很显然大家都会用逆向工程。大家也应该都会,但是就只在逆向工程中,我遇到了一个很纠结的问题。数据表中是有datetime和date类型的数据,逆向工程出来的是datetime对应 java.sql.Timestamp;date对应java.util.Date。但是问题就在这里。在我调试的过程中会一直报错,说是时间类型不匹配。从头到尾检查了一边,感觉没什么问题,于是我只能开始推敲hql语句,令我无法理解的是,即时我只是

this.getHibernateTemplate().find(“from table”);他依然报类型不匹配的,这我表示很难理解,我都还没开始类型转换就能报错?但是我换了一张表又没问题。在我排除了代码问题后,我开始注意这两张表的区别,之前一直认为是datetime类型的错误,现在开始注意表的区别,从中发现了date这个字段类型。其中不报错的表中是没有date类型的。从而锁定了问题肯定出现在这个date类型。其中由于对sqlserver的相信,我把问题的根源锁定在了编译器的逆向工程。

         之前提到过datetime(数据库类型)对应 java.sql.Timestamp(hbm映射文件类型)

         之前提到过date(数据库类型)对应 java.util.Date(hbm映射文件类型)

发现,一个是java.sql一个是java.util。于是我开始关心这两个的区别,也就是java.util.Date和java.sql.Date的区别。上网查了资料发现:

         java.util.Date就是在除了SQL语句的情况下面使用

java.sql.Date 是针对SQL语句使用的,它只包含日期而没有时间部分

         java.util.Date是 java.sql.Date 的父类

         继承关系:java.lang.Objectà java.util.Date à java.sql.Date

         java.util.Date是 java.sql.Date 的父类,前者是常用的表示时间的类,我们通常格式化或者得到当前时间都是用他,后者之后在读写数据库的时候用他,因为PreparedStament的setDate()的第2参数和ResultSet的getDate()方法的第2个参数都是java.sql.Date。

 

         当我把hbm文件中的java.util.Date换成 java.sql.Date后,问题得以解决。

 

你可能感兴趣的:(编译器逆向工程小问题)