2012-04-03 61 views
0

我需要從搜索條件中輸入一年的所有記錄。在休眠狀態下使用年份條件的搜索記錄

例如:String year =「2012」;

在hibernate中它是如何工作的?

criteria.add(Restrictions.like("createDate", "%"+year+"%")); 

createDate是從oracle數據庫以DD-MM-YY格式獲取的。

請建議..

+1

是'createDate' Oracle中的'DATE '?或者'VARCHAR2'?如果它是'DATE',它沒有格式 - Oracle中的日期將始終以不可讀的壓縮二進制格式存儲。 – 2012-04-03 05:41:38

+0

是Oracle中的createDate日期。它採用DD-MM-YY格式,但我希望搜索記錄在全年的基礎上,就像我選擇2011年或2012年或2009年那樣。有沒有在休眠解析方法相同?我還有一些其他標準..所以我不能使用SQL查詢。 – Sweety 2012-04-03 05:45:26

+0

我不認爲你昨天提出的問題之間有任何區別:http://stackoverflow.com/questions/9973730/hibernate-criteria-for-get-records-which-have-year-2012/9974789#9974789他們是同一個國際海事組織。 – 2012-04-03 06:35:33

回答

2

試着這麼做:

criteria.add(Restrictions.sqlRestriction("to_char({alias}.CREATE_DATE, 'yyyy') = ?", year, Hibernate.STRING)); 

我假設映射到createDate列的名稱爲CREATE_DATE

+0

我應該通過什麼別名?這裏創建日期可以是01-10-12或02-12-08那樣.. – Sweety 2012-04-03 06:29:58

+0

'{alias}佔位符被查詢實體的行別名替換'請參閱:http://docs.jboss。 org/hibernate/orm/3.3/reference/en/html/querycriteria.html(你也許想在沒有'{alias} .'部分的情況下嘗試它) – 2012-04-03 06:40:19

+0

as @JustinCave said - Oracle Date還沒有格式。當使用'to_char'轉換爲字符串時,您可以格式化它,在我的答案中,我只從日期開始的四位數字。如果你查詢一個日期(例如在sqlplus中),你將它作爲一個由NLS_DATE_FORMAT格式化的字符串,在你的情況下可能是'DD-MM-YY',這並不意味着沒有「4位數年份」 – 2012-04-03 06:45:18