hibernate 关于date问题 一次查询结果 再通过结果查询返回结果为空

现在有这么一个需求 用户工作记录的统计:

我通过 hibernate 查询一个人 一次工作 同行的人的名字,

我首先通过hibernate 用这个人的名字 连接2个表(一个是人员表一个是工作表)通过名字去 找到他们工作 时间。然后 通过时间去查找同行人的名字 ,结果返回的结果为null 连自己都找不到,
第一次查询 hql:
select new map(pub.vcName as vcName,tsp.addTime as addTime,tsp.shebeiId as shebeiId,tsp.personButton as button,tsp.begTime as begtime,tsp.endTime as endtime,tsp.endTime-tsp.begTime as durtime,tc.vcName as cjname,tg.vcName as gqame) from "
+ sqlfrom
+ ",TShebeiPerson as tsp where tsp.personId=pub.vcId and tsp.personId=:personId "
+ dwid + beg + end + " order by tsp.begTime desc";

打印输出结果有 addTime 这样: 2013-02-20 10:01:02.0 (有时分秒)

第二次查询hql:

from TShebeiPerson as tsp where tsp.addTime = :addTime"

结果返回结果为空。

2个回答

可以用类似这样的where to_char(tsp.addTime,"yyyy-MM-dd HH:mm:ss") = :addTime"

yingzhi9
yingzhi9 哥们,你的方案是可行的,我觉得应该是 hiberate 用TimeStamp 而我用的util.Date 结果由于数据的精度不同而 无法返回正确的结果,而我把所有的相关都用TimeStamp 依旧用等于号 无法找不到结果。不知道这具体是什么原因,求指点。
6 年多之前 回复

请问addTime属性是什么类型?看第一个查询得到的结果'addTime',说明数据库中的字段应该是DATE,是吗?

book_humanlixin
book_humanlixin 你的数据库时区有问题,最好将数据库时区修改为dbxx,具体请google一下。
6 年多之前 回复
yingzhi9
yingzhi9 我这里的addTime 都是从同一个数据库那出来的 。
6 年多之前 回复
yingzhi9
yingzhi9 +08:00 -07:00
6 年多之前 回复
book_humanlixin
book_humanlixin 执行SELECT SESSIONTIMEZONE FROM DUAL;得到什么结果?再执行SELECT DBTIMEZONE FROM DUAL;看看得到什么结果?
6 年多之前 回复
book_humanlixin
book_humanlixin 没错,是利用的Timestamp的toString方法打印的,因此这个时间是对应你本地时区(东8区)的时间,它对应的格林威治时间是'2013-02-20 02:01:02.0',当使用这个时间比较时,如果数据库的时区很重要,时区相同的时间才有可比性。
6 年多之前 回复
yingzhi9
yingzhi9 2013-02-20 10:01:02.0 这个打印是 util.Date 的toString 方法打印的。
6 年多之前 回复
book_humanlixin
book_humanlixin 原文中"打印输出结果有 addTime 这样: 2013-02-20 10:01:02.0 (有时分秒) "说明这个时间应该是你本地时区的时间,即东8区的时间,不知道数据库的时区设置是否也是东8区。
6 年多之前 回复
yingzhi9
yingzhi9 数据库是oracle 的 我现在 在hebernate的配置文件和java 文件中都 用的java.sql.Timestamp
6 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!