原文地址: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. 用css画图标

    css3的属性 transform(转换) 用途很广泛,功能也很强大,为了熟悉它的各种转换方式(平移 translate,旋转 rotate,扭曲 skew,放缩 scale),我做了一些平常常用的一 ...

  2. 解决android中Layout文件下的xml文件配好后,R类中不能自动生成相应代码

    不能更新的原因: 1.在xml文件中代码错误或者格式错误 2.eclipse 编译器是老版本 3.布局文件的文件名有大写字母 4.含有相同文件名.格式的xml文件 解决方法: 1.找到出错的xml文件 ...

  3. VS的快捷键F12改成和ECLIPSE一样用ctrl+点击下载线

    安装resharper 插件即可 不过这个插件是收费的,可免费体验30天

  4. JavaWeb学习总结,文件上传和下载

    在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用 ...

  5. java 24 - 2 GUI之监听机制和适配器改进窗口关闭

    我们创建了窗体后,就要对窗体进行操作,比如关闭窗口.而这时候就要建立监听机制: 事件监听机制: A:事件源 事件发生的地方 B:事件 就是要发生的事情 C:事件处理 就是针对发生的事情做出的处理方案 ...

  6. vijos1334 NASA的食物计划(二维费用的背包问题)

    背景 NASA(美国航空航天局)因为航天飞机的隔热瓦等其他安 全技术问题一直大伤脑筋,因此在各方压力下终止了航天 飞机的历史,但是此类事情会不会在以后发生,谁也无法 保证,在遇到这类航天问题时,解决方 ...

  7. Apache 的搭建及vim的简单命令

    一. vim 简单命令 pwd     当前路径 ls    当前路径所有目录 cd  目录地址   跳转到指定目录 /xxx  查找xxx x 删除当前字符 n 执行上一次查找 二.为什么使用apa ...

  8. HTML 学习笔记 CSS3 (2D Matrix)

    Matrix 矩阵 那么什么是矩阵呢? 矩阵可以理解为方阵,只不过 平时方阵里面站着人 矩阵中是数值: CSS3中的矩阵: css3中的矩阵指的是一个方法,书写为matrix() 和 matrix3d ...

  9. TFS命令tf:undo(强制签入签出文件)

    由于修改计算机名称或不同电脑上操作忘记签入,则需要强制签入文件 具体步骤如下: 1.在命令行中输入"cd  C:\Program Files\Microsoft Visual Studio ...

  10. noi1696 逆波兰表达式

    1696:逆波兰表达式 http://noi.openjudge.cn/ch0303/1696/ 总时间限制:  1000ms 内存限制:  65536kB 描述 逆波兰表达式是一种把运算符前置的算术 ...