原文地址:http://blog.csdn.net/woshisap/article/details/6543027

1:Hibernate操作时间需要注意的问题

hibernate很大的一个特点就是屏蔽了数据库的差异,使用了hibernate就应该尽量HQL来操作数据库(除非不得不用数据库本身的一些特性),而对于时间类型的比较hibernate也是支持的。

HQL:     and acceptDate<=:end

用一个时间类型来替换参数end:query.setDate("end",endDate);

顺便在提一个问题,我们经常碰到查询从A(起始时期)到B(结束日期)的纪录。

如果数据库中字段类型为timestamp,那么查询2005-11-23到2005-11-23的纪录时不会出现2005-11-23那一天的纪录,哪怕你的比较符号用的是>=和<=;因为数据库中的2005-11-23的纪录是这样的格式

2005-11-23 15:35:48:253,而query.setDate设置一个时间参数进去,他是用这个时间比较的

2005-11-23 00:00:00 000,

所以因该用query.setTimeStamp("end",endDate);

如果从view层取到的date不包含后面的time信息,最好

endDate.setHours(23);

endDate.setMinutes(59);

endDate.setSeconds(59);

对开始时间

startDate.setHours(0)

startDate.setMinutes(0);

startDate.setSeconds(0);

这样就是查询 A-0:0:0 到 B-23:59:59时间段的数据:

3:程序积累

实例一:

Hibernate在保存和更新Date类型的数据到数据库的时候,如果设置不当,会舍弃时分秒,和数据库中Date类型的精确度不符(如Oracle的Date是带时分秒的).

引起的原因主要是mapping文件中的字段类型被设成了 type="date",而mapping文件一般都是通过hibernate提供的工具生成的,hibernate提供的工具默认把数据库端date型 的字段设成type="date".从而Hibernate在用JDBC做数据库更新的时候会用 statement的setDate(index, sqlDate),插入数据库的日期只有年月日.

下面的JDBC代码演示了这个问题:

String sql = "UPDATE Timetest T SET T.datev=? WHERE T.id=?";
            stmt = conn.prepareStatement(sql);

// java.sql.Date sqlDate = new java.sql.Date(26,7,2010);
            // sqlDate.setTime(System.currentTimeMillis());
            // stmt.setDate(1, sqlDate); //如果是用setdate的方式,时分秒会被舍弃

//用setTimestamp的方式,时分秒会被保存
            stmt.setTimestamp(1, new Timestamp(System.currentTimeMillis()));

stmt.setLong(2, 1L);
            stmt.executeUpdate();
            conn.commit();

使用时需要注意的问题:

1,如果是用Hibernate的对象来影射数据库操作(save,load..),需要将mapping文件的type="date"改成type="timestamp".

2,如果用Query(session的createQuery和createSQLQuery),在赋值的时候用query.setTimestamp(0, new Date());

String   hql   =     "   from   table   tb   where   tb.startdate   =   :Startdate "; 
Query   q   =   session.createQuery(hql).setString( "Startdate ",   sdate); 
修改为: 
String   hql   =     "   from   table   tb   where   tb.startdate   like   :Startdate "; 
Query   q   =   session.createQuery(hql).setString( "Startdate ",   sdate+ "% ");

实例二:

java.sql.Date   beginDate=java.sql.Date.valueOf( "2006-6-1 "); 
java.sql.Date   endDate=java.sql.Date.valueOf( "2006-6-2 "); 
"from   table   tb   where   tb.startdate   <:endDate   and   tb.startdate   > =   :beginDate "; 
query.setDate( "beginDate ",beginDate); 
query.setDate( "endDate ",endDate);

[转]Hibernate时间总结的更多相关文章

  1. 【01-14】hibernate时间生成

    package rugal.sample.core.entity; import java.util.Date; import java.util.UUID; import javax.persist ...

  2. Hibernate(三)——框架中的关系映射

    在设计数据库时我们会考虑,表与表之间的关系,例如我们前边经常提到的一对一,一对多,多对多关系,在数据库中我们通过外键,第三张表等来实现这些关系.而Hibernate时间实体类和数据库中的表进行的映射, ...

  3. Hibernate框架(三)框架中的关系映射

    在设计数据库时我们会考虑,表与表之间的关系,例如我们前边经常提到的一对一,一对多,多对多关系,在数据库中我们通过外键,第三张表等来实现这些关系.而Hibernate时间实体类和数据库中的表进行的映射, ...

  4. 三框架:使用数据源dbcp注意

    使用spring整合hibernate时间,需要使用该数据源,数据源使用apache的dbcp,使用dbcp当需要依靠pool的jar包.选择dbcp和pool当你需要注意. DBCP 2 compi ...

  5. 解决Mysql连接池被关闭 ,hibernate尝试连接不能连接的问题。 (默认mysql连接池可以访问的时间为8小时,如果超过8小时没有连接,mysql会自动关闭连接池。系统发布第二天访问链接关闭问题。

    解决Mysql连接池被关闭  ,hibernate尝试连接不能连接的问题. (默认MySQL连接池可以访问的时间为8小时,如果超过8小时没有连接,mysql会自动关闭连接池. 所以系统发布第二天访问会 ...

  6. [转]Hibernate设置时间戳的默认值和更新时间的自动更新

    原文地址:http://blog.csdn.net/sushengmiyan/article/details/50360451 Generated and default property value ...

  7. Springmvc+Hibernate在Eclipse启动Tomcat需要很长时间的解决方法

    最近在学习SpringMvc开发,有一个提问困扰了很久,就是在Eclipse启动Tomcat需要很长时间,大概要1分多钟. 启动日志: 九月 08, 2016 8:59:01 下午 org.apach ...

  8. [原创]java WEB学习笔记81:Hibernate学习之路--- 对象关系映射文件(.hbm.xml):hibernate-mapping 节点,class节点,id节点(主键生成策略),property节点,在hibernate 中 java类型 与sql类型之间的对应关系,Java 时间和日期类型的映射,Java 大对象类型 的 映射 (了解),映射组成关系

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  9. hibernate Java 时间和日期类型的 Hibernate 映射

    基础知识: 在 Java 中, 代表时间和日期的类型包含: java.util.Date 和 java.util.Calendar. 此外, 在 JDBC API 中还提供了 3 个扩展了 java. ...

随机推荐

  1. 完全平方数(钟神的hao)

    [问题描述] 从1− ?中找一些数乘起来使得答案是一个完全平方数,求这个完全平方数最大可能是多少. [输入格式] 第一行一个数字?. [输出格式] 一行一个整数代表答案对100000007取模之后的答 ...

  2. uva216 Getting in Line

    Computer networking requires that the computers in the network be linked. This problem considers a \ ...

  3. slice,substr和substring的区别

    首先,他们都接收两个参数,slice和substring接收的是起始位置和结束位置(不包括结束位置),而substr接收的则是起始位置和所要返回的字符串长度.直接看下面例子: var test = ' ...

  4. 数据表格 - DataGrid - 字段排序

    设置默认排序字段 sortName:"id",sortOrder:"desc",单独为每个字段设置排序 {field: "name", ti ...

  5. P3376 【模板】网络最大流

    P3376 [模板]网络最大流 题目描述 如题,给出一个网络图,以及其源点和汇点,求出其网络最大流. 输入输出格式 输入格式: 第一行包含四个正整数N.M.S.T,分别表示点的个数.有向边的个数.源点 ...

  6. DEDECMS之四 栏目调用

    一.内容页调用 {dede:type} <a href=" [field:typelink /] "> [field:typename/] </a> {/d ...

  7. 条件注释判断浏览器版本<!--[if lt IE 9]>

    <!--[if !IE]><!--> 除IE外都可识别 <!--<![endif]--><!--[if IE]> 所有的IE可识别 <![e ...

  8. 微软职位内部推荐-Software Development Engineer

    微软近期Open的职位: Job Title: Software Development Engineer Work Location: Suzhou, China The Office 365 Co ...

  9. [py]简易pick lucky num程序

    程序功能: 1,用户输入数字,当用户输入指定数字时候,输出他输入的循环那次 2,第二次询问是否还要输 3,如果no 则 终止 4,如果yes则继续输入 判断输入是否大于首次输入的 如果大于则开始循环输 ...

  10. Openwrt Image Builder/SDK 初探

    image builder和SDK既可以从官网上下载,又可以自己进行编译(make menuconfig).官网上下载的是预先帮你编译好的,这样可以大量节省自己编译源码花的时间,这两个东西相当于半成品 ...