论坛首页 Java企业应用论坛

问关于hibernate里的日期比较

浏览 55447 次
该帖已经被评为精华帖
作者 正文
   发表时间:2004-06-30  
mysql里
有一个表里有一列为datetime类型,假定为myDate
影射到hibernate里为java.util.Date类型

我怎么获得指定日期的数据?

引起问题的是datetime和Date里都含有时间
导致 myDate = new java.util.Date() 比较不成功
最简单的做法是把数据库的datetime类型改为date类型
但是我又必须使用datetime

难道要myDate >= '2004-06-29 00:00:00' and myDate < '2004-06-30 00:00:00'这样的比较?
   发表时间:2004-06-30  
HQL的where部分: where myDate>:minDate and myDate<:maxDate
setDate("minDate",minDate);
setDate("maxDate",maxDate);

不可以吗??
0 请登录后投票
   发表时间:2004-06-30  
我的意思就是说
不得不这么做么?
0 请登录后投票
   发表时间:2004-07-01  
也许吧.
你想一下,每个数据库的日期格式都是不一样的.
eg:
sqlserver类似字符串用两个单引号('日期字符串').access是用两个井号(#日期字符串#),oracle是用to_date(字符串,格式)函数的等.
如果是用像你那样的话,就不通用了(不能夸数据库).

我也只是推测的,有兴趣去看一下hb的源码.
如果清楚了,不妨共享一下.
谢谢了.
0 请登录后投票
   发表时间:2004-07-01  
目前的做法
Calendar cal = Calendar.getInstance();;
cal.setTime(date);;
cal.set(Calendar.HOUR_OF_DAY, 0);;
cal.set(Calendar.MINUTE, 0);;
cal.set(Calendar.SECOND, 0);;
cal.set(Calendar.MILLISECOND, 0);;
Date begin = cal.getTime();;
cal.add(Calendar.DATE, 1);;
Date end = cal.getTime();;
Query query = sess.createQuery("from MyTable where myDate>=:begin and myDate<:end");;
query.setDate("begin", begin);;
query.setDate("end", end);;
List list = query.list();;


求更好的做法
0 请登录后投票
   发表时间:2004-07-06  
我的做法:
Date date = new Date();; 
List list = sess.find("from MyTable where myDate between ? and DATEADD(d,1,?);",new Object[]{date,date},new Type[]{Hibernate.DATE,Hibernate.DATE});; 

数据库是SQLServer,我列出当天新闻就是这样实现的,很简单。
0 请登录后投票
   发表时间:2004-07-06  
你的数据库是date还是datetime的
你的date变量的时间部分需要清零不
0 请登录后投票
   发表时间:2004-07-16  
datetime
不用
0 请登录后投票
   发表时间:2004-08-20  
今天因为做个时间段的查询 也遇到这个问题 看了一下hibernate的src。
上面的解决其实可以如下解决

Date date = new Date();; 
Calendar rightNow = Calendar.getInstance();;
rightNow.setTime(date);;
rightNow.set(Calendar.HOUR_OF_DAY,23);;
rightNow.set(Calendar.MINUTE,59);;
rightNow.set(Calendar.SECOND,59);;
date = rightNow.getTime();;
List list = sess.find("from MyTable where myDate between ? and ?",new Object[]{date,date},new Type[]{Hibernate.DATE,Hibernate.TIMESTAMP});; 


因为Hibernate.DATE 是net.sf.hibernate.type.DateType 它返回的插入到sql中的值是'yyyy-mm-dd'因此第一个from的日期参数直接用此即可;
Hibernate.TIMESTAMPnet.sf.hibernate.type.TimestampType它返回的插入到sql中的值 "yyyy-MM-dd HH:mm:ss";因此第二个from的日期参数直接用此即可才可以取到time的时间;
Hibernate.TIMESTAMP
所以如果只查一天的第一步就是把要插入的to的时间设为该天的最大值。
0 请登录后投票
   发表时间:2005-09-19  
我的表里有字段:userId ,beginTime,endTime   ,后面两个是timestamp类型的
现在需要查出这个表中begintime + 5分钟  比  endTime小的记录集总数需要怎么写呢?

用select COUNT(DISTINCT user.id) from beans.User user WHERE ((user.beginTime+5) &lt; user.endTime)
这里是加了5天的,这里怎么加5分钟呢?
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics