用JPA比较两个日期

时间:2009-08-28 15:42:09

标签: java jpa jpql

我需要在JPQL查询中比较两个日期,但它不起作用。

这是我的问题:

Query query = em.createQuery(
    "SELECT h 
     FROM PositionHistoric h, 
          SeoDate d 
     WHERE h.primaryKey.siteDb = :site 
     AND h.primaryKey.engineDb = :engine 
     AND h.primaryKey.keywordDb = :keyword 
     AND h.date = d 
     AND d.date <= :date 
     ORDER BY h.date DESC");`

我的参数日期是java.util.Date

我的查询返回一个对象列表,但日期是我的参数的上限和下限。

有人知道怎么做?

感谢。

2 个答案:

答案 0 :(得分:2)

您应该使用的查询是:

 FROM PositionHistoric h
   INNER JOIN FETCH h.date
WHERE h.primaryKey.siteDb = :site
  AND h.primaryKey.engineDb = :engine
  AND h.primaryKey.keywordDb = :keyword
  AND h.date.date <= :date

请注意,按h.date排序是毫无意义的(因为它指向SeoDate实体,因此实际上您通过PK排序)并且您不能按h.date.date排序,因为SeoDate被映射为many-to-one

另请注意,INNER JOIN FETCH h.date行本身并不是必需的,但如果您确实需要在返回的列表中使用SeoDate属性,它将为您节省额外的延迟查询的开销。

答案 1 :(得分:0)

我建议使用java.sql.Date而不是java.util.Date

因为您将它传递给JPQL(一种SQL)。

我通常使用TIMESTAMP代替Date,但是如果你没有选择..

它是:h.date = d.date而不是h.date = d?