论坛首页 Java版 Hibernate

问关于hibernate里的日期比较

浏览 24642 次
该帖已经被评为精华帖
作者 正文
时间: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
目前的做法
[code:1]
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();
[/code:1]

求更好的做法
   
0 请登录后投票
时间:2004-07-06
我的做法:
[code:1]
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});
[/code:1]
数据库是SQLServer,我列出当天新闻就是这样实现的,很简单。
   
0 请登录后投票
时间:2004-07-06
你的数据库是date还是datetime的
你的date变量的时间部分需要清零不
   
0 请登录后投票
时间:2004-07-16
datetime
不用
   
0 请登录后投票
时间:2004-08-20
今天因为做个时间段的查询 也遇到这个问题 看了一下hibernate的src。
上面的解决其实可以如下解决

[code:1]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}); [/code:1]

因为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) < user.endTime)
这里是加了5天的,这里怎么加5分钟呢?
   
0 请登录后投票
论坛首页 Java版 Hibernate

跳转论坛:
JavaEye推荐