3

我需要比较 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

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

有人知道怎么做吗?

谢谢。

4

2 回答 2

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 属性,它将为您节省一些额外的惰性查询的开销。

于 2009-09-03T19:44:20.397 回答
0

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

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

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

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

于 2009-08-28T17:16:36.053 回答