今天使用Hibernate操作时,查询的操作也出现了这个错误,百思不得解,最后在网上找到了结局办法,应该算不上办法,就是原因。
首先我使用的hql语句如下
String hql="select new PO(。。。。) from 。。。";
出现这个错误,很大程度上是由于时间格式引起的,原因如下
1、在oracle中,使用Hibernate查询返回的时间是java.util.Date的。
2、使用Struts1时,前台的时间插件之类的在form里一定要是String的,否则会报错。
3、使用BeanUtils.copyProperties方法时,form里的String时间只能转换为java.sql.Date类型的。
4、由于3的原因,造成了Po实体类的时间类型要为java.sql.Date类型的。
5、Oracle返回java.util.Date,PO是java.sql.Date,于是问题就出现了。
目前的解决办法就是在构造方法中进行转换,还有一种方法就是自己实现String到java.util.Date之间的转换,不过我现在做的是一个老项目,之前有很多代码,万一改错了就麻烦了,所以采用构造方法中转换还是相对稳妥一些。
不得不吐槽一下,我们项目中的大多数问题,基本上是跟数据库有关的时间类型引起的,还有就是项目中的jar包冲突。。。