2009-08-28 17 views
2

JPQLクエリで2つの日付を比較する必要がありますが、動作しません。ここでJPAと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

です。

誰かこの方法を教えてください。

ありがとうございました。

+1

関連するプロパティに注釈が付けられている場合は、 'PositionHistoric'クラスと' SeoDate'クラスのフラグメントを投稿できますか?そうでなければ起こっていることを理解することはかなり難しいです。あなたの命名計画はむしろ矛盾しているようです。 – ChssPly76

答えて

0

私はあなたがJPQL(SQLの一種)に渡しますのでjava.sql.Dateの代わりにjava.util.Date

を使用することをお勧めします。

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

をそして、それは次のようになります。代わりにh.date = D h.date = d.date?

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で注文しているように)あなたが注文することができませんSeoDateがmany-to-oneとしてマップされているため、h.date.dateによって

また、INNER JOIN FETCH h.date行はそれ自体では必要ありませんが、返されたリストでSeoDate属性を実際に使用する必要がある場合は、追加の遅延クエリーに若干のオーバーヘッドがかかりません。

+0

あなたの解決策の問題は、私がPositionHistoricを取得することですが、このオブジェクトが知られている最後の日付であるとは確信していません – Kiva

+0

** PositionHistoricエンティティのリスト**を取得します。それらのすべてはあなたのパラメータより前の日付を持つ 'SeoDate'エンティティにリンクされます。これは、あなたが投稿した元のクエリが動作することを除いて、実行しようとしたものです。あなたが何か他のことをする必要がある場合は、あなたの質問を明確にし、達成しようとしていることを正確に説明する必要があります。 – ChssPly76

+0

私のエラーが見つかりました。私のprimaryKeyでは、日付にはJPAが同じオブジェクトを毎回返すようなものは含まれていませんでした。私は、primaryKeyに日付を含め、すべて正常に動作しました。 あなたの答えをありがとう。 – Kiva

関連する問題