2014-01-21 35 views
1

我創建簡單的@NamedQuery在實體:的Java NamedQuery並設定日期參數

@NamedQueries({ 
     @NamedQuery(name = ProductChangeLog.GetByDate, query = "From ProductChangeLog where date = :date ") 
}) 

日期是Date.sql

,我想執行這個查詢:

List<ProductChangeLog> productChangeLogs = session.getNamedQuery(ProductChangeLog.GetByDate) 
      .setString("date", date) 
      .list(); 

我的問題是,這@NamedQuery產生查詢:

Hibernate: select productcha0_.id as id21_, productcha0_.availible as availible21_, productcha0_.category as category21_, productcha0_.date as date21_, productcha0_.description as descript5_21_, productcha0_.name as name21_, productcha0_.partnerId as partnerId21_, productcha0_.price as price21_, productcha0_.producent as producent21_, productcha0_.productId as productId21_, productcha0_.productUrl as productUrl21_, productcha0_.status as status21_ from ProductChangeLog productcha0_ where productcha0_.date=2014-01-20 

這個查詢是錯誤的,cose日期應該在「」中,像這樣:productcha0_.date =「2014-01-20」

我該怎麼辦?

我已經試過

.setDate("date", date) 


.setParameter("date", date) 

而且門檻不工作。

+0

你可以發佈任何堆棧跟蹤?你在查詢中錯過了「SELECT」關鍵詞嗎? – CycDemo

+0

這是HQL,我不必添加SELECT。 – Ilkar

+0

沒有堆棧跟蹤 - 我沒有這個查詢的結果。 – Ilkar

回答

0

如果你=運營商,parameter date必須是相同的日期形式數據庫,確切地說。我想,這就像使用=運算符作爲日期參數的風險JPQLhql。 我建議使用><BETWEEN運營商。

WHERE Adate > Bdate      => Adate is before Bdate 
WHERE Adate < Bdate      => Adate is after Bdate 
WHERE Cdate BETWEEN Adate AND Bdate  => Cdate is between Adate and Bdate 
+0

它不工作 – Ilkar

1

您的ProductChangeLog pojo中的日期字段是否使用正確的Temporal註釋?

Hibernate Annotations

「在普通的Java API,時間的時間精度沒有定義。當處理時間類型數據,你可能要描述數據庫中所預期的精度。時態數據可以有DATE,TIME或TIMESTAMP精確度(即實際日期,只有時間,或兩者)。使用@Temporal註釋來微調。「

@Temporal(TemporalType.TIMESTAMP) 
@Temporal(TemporalType.DATE) 
@Temporal(TemportalType.TIME) 
+0

我已經添加了它,但沒有任何更改。 – Ilkar

-1

您需要在「:」和「=」之間沒有空格。所以它應該閱讀

@NamedQueries({ 
     @NamedQuery(name = ProductChangeLog.GetByDate, query = "From ProductChangeLog where date =:date ") 
})