如何在Hibernate查询中按DateTime搜索?

时间:2014-04-23 14:30:49

标签: java spring hibernate hql spring-data

我正在使用Spring Data框架,我在我的存储库中查询如下:

@Query("SELECT c FROM Contract c "
        + " WHERE LOWER(c.name) LIKE LOWER(:searchTerm) "
        + " OR LOWER(c.legalName) LIKE LOWER(:searchTerm) "
        + " OR cast(c.startDate as string) LIKE LOWER(:searchTerm)"
        )   
public Page<Contract> findAllBySearchTerm(@Param("searchTerm") String searchTerm, Pageable page)

我可以按名称和legalName搜索合约,但我有问题通过 startDate 搜索合约,格式为“yyyy-MM-dd'T'HH:mm:ss “。 我试图将startDate强制转换为varchar,但函数 cast()对Oracle(这是我的数据库)无法正常工作。

我也试过这个,但也行不通:

+ " to_char(c.startDate, 'MM/dd/yyyy') LIKE LOWER(:searchTerm)"

我尝试将searchTerm强制转换为DateTime,并将其与startDate进行比较,但我无法使用函数 to_date()

有没有人为这个问题找到解决方案?一些有用的链接可能吗?

1 个答案:

答案 0 :(得分:0)

对于此查询

@Query("SELECT c FROM Contract c "
    + " WHERE LOWER(c.name) LIKE LOWER(:searchTerm) "
    + " OR LOWER(c.legalName) LIKE LOWER(:searchTerm) "
    + " OR cast(c.startDate as string) LIKE LOWER(:searchTerm)"
    )   
public Page<Contract> findAllBySearchTerm(@Param("searchTerm") String searchTerm, Pageable page)`
  • 考虑使用=而不是LIKE,因为查询中没有通配符
  • 对于Date,考虑将searchTerm字符串转换为Date对象而不是SQL Date Column转换为字符串?所以类似于OR c.startDate = :searchTerm,其中searchTerm是一个Date对象