Hibernate 仅比较HQL中的日期组件

Hibernate 仅比较HQL中的日期组件,hibernate,hql,Hibernate,Hql,我需要使用HQL按时间筛选来选择一些实体。但是我只需要比较没有时间的日期部分。例如,1.1.2011 12.00和1.1.2011 13.20必须相等 我能用什么接线员 @Query("FROM Item item " + "WHERE item.date [equality by date operator] :date " ) List<Item> findByDate(@Param("date") Date date); @Query(“来自项”+ “其中item.dat

我需要使用HQL按时间筛选来选择一些实体。但是我只需要比较没有时间的日期部分。例如,1.1.2011 12.00和1.1.2011 13.20必须相等

我能用什么接线员

@Query("FROM Item item " +
  "WHERE item.date [equality by date operator] :date " )
List<Item> findByDate(@Param("date") Date date);
@Query(“来自项”+
“其中item.date[日期相等运算符]:date”)
列出findByDate(@Param(“日期”)日期);

如果您不介意DB特定的函数,您可以这样做(以Oracle为例)

@Query(“来自项目,其中trunc(Item.date)=trunc(:date)”)
列出findByDate(@Param(“日期”)日期);

您可以使用它,因为OracleDialante将
trunc
注册为
StandardSQLFunction
,而Oracle的
trunc
删除了日期的时间成分。

如果您不介意DB特定的功能(并且您应该),则使用两个日期:

  • from date=时间设置为午夜的日期
  • 截止日期=时间设置为23:59:59.999的日期
  • 然后查询日期>=从日期和
    试试这个。

    我正在使用oracle db,最好使用trunc。Tnx用于我们的回答很好,但是如果您想使用内存中的DB进行单元测试,而这不受支持,您将被卡住。在Oracle中,为了避免错误,您可以调用
    trunc(item.date,'YYYY')
    以避免一些错误。
    @Query("FROM Item item WHERE trunc(item.date) = trunc(:date) " )
    List<Item> findByDate(@Param("date") Date date);
    
    "Select col from Table t where t.date = CURRENT_DATE()"