[转]Hibernate时间总结
原文地址: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时间总结的更多相关文章
- 【01-14】hibernate时间生成
package rugal.sample.core.entity; import java.util.Date; import java.util.UUID; import javax.persist ...
- Hibernate(三)——框架中的关系映射
在设计数据库时我们会考虑,表与表之间的关系,例如我们前边经常提到的一对一,一对多,多对多关系,在数据库中我们通过外键,第三张表等来实现这些关系.而Hibernate时间实体类和数据库中的表进行的映射, ...
- Hibernate框架(三)框架中的关系映射
在设计数据库时我们会考虑,表与表之间的关系,例如我们前边经常提到的一对一,一对多,多对多关系,在数据库中我们通过外键,第三张表等来实现这些关系.而Hibernate时间实体类和数据库中的表进行的映射, ...
- 三框架:使用数据源dbcp注意
使用spring整合hibernate时间,需要使用该数据源,数据源使用apache的dbcp,使用dbcp当需要依靠pool的jar包.选择dbcp和pool当你需要注意. DBCP 2 compi ...
- 解决Mysql连接池被关闭 ,hibernate尝试连接不能连接的问题。 (默认mysql连接池可以访问的时间为8小时,如果超过8小时没有连接,mysql会自动关闭连接池。系统发布第二天访问链接关闭问题。
解决Mysql连接池被关闭 ,hibernate尝试连接不能连接的问题. (默认MySQL连接池可以访问的时间为8小时,如果超过8小时没有连接,mysql会自动关闭连接池. 所以系统发布第二天访问会 ...
- [转]Hibernate设置时间戳的默认值和更新时间的自动更新
原文地址:http://blog.csdn.net/sushengmiyan/article/details/50360451 Generated and default property value ...
- Springmvc+Hibernate在Eclipse启动Tomcat需要很长时间的解决方法
最近在学习SpringMvc开发,有一个提问困扰了很久,就是在Eclipse启动Tomcat需要很长时间,大概要1分多钟. 启动日志: 九月 08, 2016 8:59:01 下午 org.apach ...
- [原创]java WEB学习笔记81:Hibernate学习之路--- 对象关系映射文件(.hbm.xml):hibernate-mapping 节点,class节点,id节点(主键生成策略),property节点,在hibernate 中 java类型 与sql类型之间的对应关系,Java 时间和日期类型的映射,Java 大对象类型 的 映射 (了解),映射组成关系
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- hibernate Java 时间和日期类型的 Hibernate 映射
基础知识: 在 Java 中, 代表时间和日期的类型包含: java.util.Date 和 java.util.Calendar. 此外, 在 JDBC API 中还提供了 3 个扩展了 java. ...
随机推荐
- 完全平方数(钟神的hao)
[问题描述] 从1− ?中找一些数乘起来使得答案是一个完全平方数,求这个完全平方数最大可能是多少. [输入格式] 第一行一个数字?. [输出格式] 一行一个整数代表答案对100000007取模之后的答 ...
- uva216 Getting in Line
Computer networking requires that the computers in the network be linked. This problem considers a \ ...
- slice,substr和substring的区别
首先,他们都接收两个参数,slice和substring接收的是起始位置和结束位置(不包括结束位置),而substr接收的则是起始位置和所要返回的字符串长度.直接看下面例子: var test = ' ...
- 数据表格 - DataGrid - 字段排序
设置默认排序字段 sortName:"id",sortOrder:"desc",单独为每个字段设置排序 {field: "name", ti ...
- P3376 【模板】网络最大流
P3376 [模板]网络最大流 题目描述 如题,给出一个网络图,以及其源点和汇点,求出其网络最大流. 输入输出格式 输入格式: 第一行包含四个正整数N.M.S.T,分别表示点的个数.有向边的个数.源点 ...
- DEDECMS之四 栏目调用
一.内容页调用 {dede:type} <a href=" [field:typelink /] "> [field:typename/] </a> {/d ...
- 条件注释判断浏览器版本<!--[if lt IE 9]>
<!--[if !IE]><!--> 除IE外都可识别 <!--<![endif]--><!--[if IE]> 所有的IE可识别 <![e ...
- 微软职位内部推荐-Software Development Engineer
微软近期Open的职位: Job Title: Software Development Engineer Work Location: Suzhou, China The Office 365 Co ...
- [py]简易pick lucky num程序
程序功能: 1,用户输入数字,当用户输入指定数字时候,输出他输入的循环那次 2,第二次询问是否还要输 3,如果no 则 终止 4,如果yes则继续输入 判断输入是否大于首次输入的 如果大于则开始循环输 ...
- Openwrt Image Builder/SDK 初探
image builder和SDK既可以从官网上下载,又可以自己进行编译(make menuconfig).官网上下载的是预先帮你编译好的,这样可以大量节省自己编译源码花的时间,这两个东西相当于半成品 ...