Hibernate Query在日期上提取记录而忽略时间戳

Aru*_*run 2 java persistence hibernate hql

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

如果交易列只有日期部分,则我的查询返回正确的记录当交易列填充时间戳值即(日期+时间)时,会出现问题.然后查询不返回这些值.

例如:说2010年10月23日在DB 5中有10条记录,其中有时间戳条目,5条没有

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

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

我正在使用的Java/Hibernate中的查询如下

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

Ade*_*ari 9

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); 
Run Code Online (Sandbox Code Playgroud)

[编辑]

请注意,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); 
Run Code Online (Sandbox Code Playgroud)