2012-01-31 98 views
1

使用Oracle 10g,Hibernate 3,springMVC,jqgrid。我在ORACLE一些日期領域其分別對應如下休眠條件在日期字段上搜索時間範圍

@Temporal(TemporalType.DATE) 
@Column(name = "DOC_CREATION_DATE", length = 7,insertable=true,updatable=false) 
public Date getDocCreationDate() { 
    return this.docCreationDate; 
} 

在我的網格我使用jqueryCalendar過濾日期,一切都很好。 現在我有一個來自客戶端的新要求是顯示時間documentCreation他們也希望能夠過濾時間範圍。例如:

查找在6:am和7:pm之間創建的所有記錄,找到在6:am創建的所有記錄。

我曾嘗試已經與

@Temporal(TemporalType.TIMESTAMP) 

格式化日期字段,這不是他們想要的

還有什麼其他的辦法解決這個問題,有什麼好的想法如何實現這個非常歡迎。

事情是我需要使用相同的映射場在jqGrid的一列查詢正規日期(12/01/2012使用jqueryCalendar),並添加另一列的那部分時間同樣映射場一旦做到這一點,我需要查詢(休眠標準)時間列了時間範圍 這樣的模擬:

... 
criteria.add(Restrictions.ge("docCreationDate.mappedFieldTimePart",6AM)); 

謝謝所有幫助

+1

這不是他們想?如果他們想存儲時間,那就是他們想要的。使用TemporalType.DATE將只存儲日期部分。沒有存儲它是不可能的。 – 2012-01-31 23:12:42

+0

@Jesse檢查這也http://stackoverflow.com/a/4013601/706695這裏是你可以使用的參數; http://www.techonthenet.com/oracle/functions/to_date.php。但正如JB Nizet所說,如果你不存儲它,你就沒有機會按時過濾。 – HRgiger 2012-01-31 23:50:36

+0

當我格式化日期並將映射更改爲** TIMESTAMP時**我也能夠檢索整個時間,所以時間在這裏沒有問題,在那裏我只需要提取它並使用它來創建由CreationTime查詢thankYou全部 – Jesse 2012-01-31 23:53:22

回答

1

您必須更改@Temporal標註爲使用TemporalType.TIMESTAMP或添加一個字段,並TemporalType.TIME對其進行批註。 Hibernate使用@Temporal註釋來確定該字段是否被視爲java.sql.Timestampjava.util.Date,並且時間被截斷(設置爲午夜或00h 00m 00.0s)。這使得開發人員可以在他們的應用程序的任何地方使用java.util.Date,並且無需擔心Timestamp類(它從我們的大部分代碼庫中被放逐)。

+0

感謝馬特這就是我現在要做的事情創建額外的虛擬字段 TemporalType.TIME ,現在的問題是如何制定標準查詢我從來沒有通過TIME過濾任何建議 – Jesse 2012-02-01 16:49:34

+0

不知道我怎麼會這樣做與標準,但與HQL這將是非常簡單的,因爲HQL有小時)分鐘()秒()功能可用。 – 2012-02-03 17:03:39

+0

謝謝我現在正在處理不同的項目,但這絕對是解決方案的一部分 – Jesse 2012-02-19 04:30:29

3

列映射到一個時間類型的,這樣的話你必須用時間比較它的價值:

Time sixAM = Time.valueOf("06:00:00"); 
criteria.add(Restrictions.ge("docCreationDate.mappedFieldTimePart", sixAM)); 

您也可以使用常規日期:

Date sixAM = new SimpleDateFormat("HH:mm").parse("06:00"); 
criteria.add(Restrictions.ge("docCreationDate.mappedFieldTimePart", sixAM)); 
+0

謝謝我現在正在處理不同的項目,但這絕對是解決方案的一部分 – Jesse 2012-02-19 04:38:17