今天在工程中遇到Hibernate查询的时候,bean中的字段和数据库中的字段不符合(bean中有pageTime字段,但是数据库中没有此列)报错问题。
具体问题环境:
在auto_off表中,off_time字段是bigint类型,用于存放unix时间戳,bean中对应属性类型为Long类型,但是前台传递过来的时间是String类型(2016-11-25)
解决办法1:
在bean中添加一个String类型的pageTime字段,然后前台传递过来的数据使用pageTime接收,再将值转换成long类型,此时启动工程后查询时会报错。错误信息为:bean中字段找不到表中对应的列。于是想到一个类的一个属性没有在数据库中持久化,让hibernate查询数据库的时候不让它查询该属性。
通过搜索的到结论:可以在字段上添加@Transient注解(javax.persistence.Transient)让Hibernate不去查询该字段。
Transient注解详细解释:http://www.importnew.com/12611.html
@Column(name = "total") private Integer total;
解决办法2:
办法1的方法有些麻烦,最终需要的只是一个unix时间戳,那么在页面上通过日期控件用户选择的时间,转换成unix时间戳发送到后台即可。(其实开始没考虑是因为在后台会自动解析request中的参数,根据正则获取参数类型,注入bean中,构建成查询条件,不想去改这一部分)
//jquery datepicker 只能获取到年月日 var timeVal = $(this).val() + " 00:00:00"; var d = new Date(timeVal); var result = Math.round(d.getTime()/1000);