3

JPQL クエリで 2 つの日付を比較する必要がありますが、うまくいきません。

これが私のクエリです:

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.util.Date の代わりに java.sql.Date を使用することをお勧めします。

JPQL(一種のSQL)に渡すからです。

私は通常、日付の代わりに TIMESTAMP を使用しますが、選択肢がなかった場合..

そしてそれは: h.date = d.date 代わりに h.date = d ?

于 2009-08-28T17:16:36.053 に答える