2012-10-02 21 views
3

我想獲取落在兩個時間戳之間的記錄。我想用這個休眠。我想它與下面的查詢做什麼,但我沒有得到任何輸出如何在冬眠期間使用between clause子句中的日期

HQL = "From AddressInfo address where address.addressId = '"+newValues.get("pickupAddress").toString()+"' and address.updatedDateAndTime between date_format('" + DateUtility.getTimeOfBeforeOneMinute() + "', '%m/%d/%y %H:%i:%s') and date_format('"+DateUtility.getCurrentDate()+"','%m/%d/%y %H:%i:%s')";

這是從控制檯形成的SQL查詢:

select addressinf0_.T_ADM_NPK_ADDRESS_ID as T1_5_, addressinf0_.T_ADM_VNM_USER_ID as T2_5_, addressinf0_.T_ADM_FPK_USER_ASSIGNED_ID as T3_5_, addressinf0_.T_ADM_VNM_STREET_1 as T4_5_, addressinf0_.T_ADM_VNM_STREET_2 as T5_5_, addressinf0_.T_ADM_VNM_STREET_3 as T6_5_, addressinf0_.T_ADM_VNM_CITY as T7_5_, addressinf0_.T_ADM_VNM_STATE as T8_5_, addressinf0_.T_ADM_VNM_ZIPCODE as T9_5_, addressinf0_.T_ADM_DNM_LATITUDE as T10_5_, addressinf0_.T_ADM_DNM_LONGITUDE as T11_5_, addressinf0_.T_ADM_TNM_CREATE_DATETIME as T12_5_, addressinf0_.T_ADM_TNM_UPDATE_DATETIME as T13_5_ from t_address_master addressinf0_ where addressinf0_.T_ADM_NPK_ADDRESS_ID='19' and (addressinf0_.T_ADM_TNM_UPDATE_DATETIME between date_format('Tue Oct 02 17:09:53 EDT 2012', '%m/%d/%y %H:%i:%s') and date_format('Tue Oct 02 17:10:53 EDT 2012', '%m/%d/%y %H:%i:%s'))

我DB具有T_ADM_TNM_UPDATE_DATETIME紀錄= 2012年10月2日5:10:40

但結果集無法獲取此查詢...我不知道我在哪裏出錯。

任何人都可以請指導我進一步

+0

您是否獲得一個例外?你能粘貼你得到的異常嗎? – alfredaday

+0

不,我沒有得到任何異常,但我無法得到所需的輸出 – sbhatt

回答

6

您應該使用HQL參數而不是串連。

拿這個例子:

Map<String, Object> parameterNameAndValues = new HashMap<String, Object>(); 

Date startDate; 
Date endDate; 

// Assign values to startDate and endDate 

parameterNameAndValues.put("startDate", startDate); 
parameterNameAndValues.put("endDate", endDate); 

String hqlQuery = "FROM EntityName WHERE fechaInicio BETWEEN :startDate AND :endDate"; 

Query query = this.sessionFactory.getCurrentSession().createQuery(hqlQuery); 

for (Entry<String, Object> e : parameterNameAndValues.entrySet()) { 
    query.setParameter(e.getKey(), e.getValue()); 
} 

return query.list(); 

這將綁定日期參數,Hibernate會進行必要的convertions爲您避免完整性檢查和錯誤。請記住,即使MySQL以該格式保存Date對象,其他數據庫也可能不會,並且會破壞Hibernate的幫助。

+0

非常感謝mael ...它只是解決了我的問題.... – sbhatt

+0

很高興它的工作。 – ElderMael

0

使用此代碼:

SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd"); 

java.util.Date date = df.parse(startDate); 

java.util.Date date1 = df.parse(endDate); 

Date fromDate = new java.sql.Date(date.getTime()); 

Date toDate = new java.sql.Date(date1.getTime()); 

return this.sessionFactory.openSession().createQuery("From UserDailyLogin where userProfile.userId='"+id+"' And createdDate BETWEEN '"+startDate+ "' AND '"+endDate+"' ").list(); 
+0

使用此代碼 –