记录使用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);
时间: 2024-10-12 16:31:18

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

Hibernate查询Date型字段带精准时间处理办法

在数据库里经常有Date型字段,而且存储的有精准时间,在用Hibernate查询的时候默认是按Date型处理,但这样的结果是只有日期而没有时间,要想使查询结果带有时间,在Result遍历的时候传入结果日期类型为Hibernate.TIMESTAMP,所以就用到了Hibernate的addScalar()方法,这个是org.hibernate.SQLQuery里的, 例: SQLQuery query = session.createSQLQuery(SQL); query.addScalar("

[转]Hibernate查询对象所有字段,单个字段 ,几个字段取值的问题

原文地址:http://www.ablanxue.com/prone_3552_1.html 1. 查询整个映射对象所有字段 Java代码 //直接from查询出来的是一个映射对象,即:查询整个映射对象所有字段 String hql = "from Users"; Query query = session.createQuery(hql); List<Users> users = query.list(); for(Users user : users){ System.

查询Oracle中字段名带&quot;.&quot;的数据

SDE中的TT_L线层会有SHAPE.LEN这样的字段,使用: SQL>select shape.len from tt_l; 或 SQL>select t.shape.len from tt_l t; 是查询不出来的. 需要这样查询: SQL>select t."SHAPE"."LEN" from tt_l t;

No Dialect mapping for JDBC type–4 hibernate查询MySQL中longBlob数据

MySQL数据库中的类型为longBlob 实体类定义为:byte[] 类型 映射文件配置为:type="org.springframework.orm.hibernate3.support.BlobByteArrayType 异常信息: 1 org.hibernate.MappingException: No Dialect mapping for JDBC type: -4 2 at org.hibernate.dialect.TypeNames.get(TypeNames.java:56)

在SQL查询结果中添加自增列的两种方法

解决办法<一>:如果想查询出这个表的信息,并添加一列连续自增的ID,可用如下查询语句: SELECT Row_Number() over ( order by getdate() ) as init , * FROM 表名 解决办法<二>: 使用关键字IDENTITY创建临时表 SELECT IDENTITY(int,1,1) as Nid,* INTO #T FROM 表名 SELECT * FROM #T 原文地址:https://www.cnblogs.com/crrc/p/

Mysql 查询条件中字符串尾部有空格也能匹配上的问题

一.表结构 TABLE person id name 1 你 2 你(一个空格) 3 你(二个空格) 二.查询与结果 select * from person where `name` = ? 无论 ? = ”你 + 几个空格”,都会检索出全部三个结果. 三.原因 MySQL 校对规则属于PADSPACE,会忽略尾部空格 针对的是 varchar char text …… 等文本类的数据类型 此为 SQL 标准化行为.无需要设置也无法改变. 四.想要精确查询怎么办? 方法一:like selec

java中存储mysql数据库时间类型【date、time、datetime、timestamp】

在MySQL中对于时间的存储自己见表的时候都是设置的varchar类型的,感觉挺方便的. 昨天拿别人建好的表写代码,发现这张表中时间类型为datetime的,凭感觉试了一下不行,网上查了刚开始试了好几个都是不对的,一脸懵逼. -----------------------------------------------------------------------------------------------------------------------------------------

java:Hibernate框架(环境搭建,Hibernate.cfg.xml中属性含义,Hibernate常用API对象,HibernteUitl,对象生命周期图,数据对象的三种状态)

1.环境搭建: 三个准备+7个步骤 准备1:新建项目并添加hibernate依赖的jar文件  准备2:在classpath下(src目录下)新建hibernate的配置文件:hibernate.cfg.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configurati

NumberFormatException: Invalid int类型不匹配异常——使用SQL数据库查询语句select * from blacknumber order by _id desc limit ?,20;出现

异常:类型不匹配 05-06 08:12:38.151: E/AndroidRuntime(14904): java.lang.NumberFormatException: Invalid int: "18600000099" 05-06 08:12:38.151: E/AndroidRuntime(14904): at com.itheima.mobilesafe74.activity.BlackNumberActivity$Myadapter.getView(BlackNumber