Hibernate 查询获取日期记录忽略时间戳

2024-01-06

我在 DB(Oracle) 表之一中有一个时间戳列 tradedate。 我使用 hibernate 作为持久层来获取数据并将其存储到数据库。 我有一个要求,我需要按日期查询数据库。 即,用户从 UI 传递一个日期,我需要根据该日期获取过滤后的数据。

如果 tradedate 列只有日期部分,我的查询将返回正确的记录 当 tradedate 列填充时间戳值(即(日期 + 时间))时,就会出现问题。那么查询不会返回这些值。

例如:假设数据库中有 2010 年 10 月 23 日的 10 条记录,其中 5 条有时间戳条目,5 条没有

所以我的查询只返回没有时间戳的 5 行。

现在我知道我需要从时间戳中提取日期,然后进行比较,以便我获得特定日期的所有记录,但我不知道它是如何使用 Hibernate 和使用 HQL 完成的

中的查询Java/休眠我正在使用的是如下

String hql = "选择从 POJO 清算为 POJO,其中 POJO.tradeDate = :date"; 查询 query = getSession().createQuery(hql); 查询.setParameter("日期", 日期);


String hql = "from POJO as POJO where to_date(to_char(POJO.tradeDate, 'DD-MON-YY'), 'DD-MON-YY') = :date"; 
Query query = getSession().createQuery(hql); 
query.setParameter("date", date); 

[Edit]

请注意,索引(如果有的话)位于tradeDate如果您遵循上述查询,将不会被使用。如果存在一些性能问题,您可以这样做,

String hql = "from POJO as POJO where POJO.tradeDate between :date and :ceilDate"; 
Query query = getSession().createQuery(hql); 
// a date having timestamp part, 00:00:00.0, or missing completely
query.setParameter("date", date); 
// a date having timestamp part, 23:59:59.999
query.setParameter("ceilDate", ceilDate); 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Hibernate 查询获取日期记录忽略时间戳 的相关文章

随机推荐