记录使用Hibernate查询bean中字段和数据库列类型不匹配问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了记录使用Hibernate查询bean中字段和数据库列类型不匹配问题相关的知识,希望对你有一定的参考价值。

今天在工程中遇到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

 

解决办法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);

 

以上是关于记录使用Hibernate查询bean中字段和数据库列类型不匹配问题的主要内容,如果未能解决你的问题,请参考以下文章

[Hibernate] - EAGER and LAZY

jpa 实体bean中如何定义非映射字段

如何使用hibernate避免遇到违反唯一约束的问题?

hibernate-部分字段查询方案

Hibernate中Hql查询

当 Hibernate 查询中有多个 bean 别名时,列表的返回类型是啥?