HQL:
用一個時間類型來替換參數(shù)end:query.setDate("end",endDate);
順便在提一個問題,我們經(jīng)常碰到查詢從A(起始時期)到B(結束日期)的紀錄。
如果數(shù)據(jù)庫中字段類型為timestamp,那么查詢2005-11-23到2005-11-23的紀錄時不會出現(xiàn)2005-11-23那一天的紀錄,哪怕你的比較符號用的是>=和<=;因為數(shù)據(jù)庫中的2005-11-23的紀錄是這樣的格式
2005-11-23 15:35:48:253,而query.setDate設置一個時間參數(shù)進去,他是用這個時間比較的
2005-11-23 00:00:00 000,
所以因該用query.setTimeStamp("end",endDate);
如果從view層取到的date不包含后面的time信息,最好
對開始時間
startDate.setHours(0)
startDate.setMinutes(0);
startDate.setSeconds(0);
這樣就是查詢 A-0:0:0 到 B-23:59:59時間段的數(shù)據(jù):
3:程序積累
Hibernate在保存和更新Date類型的數(shù)據(jù)到數(shù)據(jù)庫的時候,如果設置不當,會舍棄時分秒,和數(shù)據(jù)庫中Date類型的精確度不符(如Oracle的Date是帶時分秒的).
引起的原因主要是mapping文件中的字段類型被設成了type="date",而mapping文件一般都是通過hibernate提供的工具生成的,hibernate提供的工具默認把數(shù)據(jù)庫端date型的字段設成type="date".從而Hibernate在用JDBC做數(shù)據(jù)庫更新的時候會用 statement的setDate(index, sqlDate),插入數(shù)據(jù)庫的日期只有年月日.
下面的JDBC代碼演示了這個問題:
使用時需要注意的問題:
1,如果是用Hibernate的對象來影射數(shù)據(jù)庫操作(save,load..),需要將mapping文件的type="date"改成type="timestamp".
2,如果用Query(session的createQuery和createSQLQuery),在賦值的時候用query.setTimestamp(0, new Date());
String
Query
修改為:
String
Query
java.sql.Date
java.sql.Date
"from
query.setDate( "beginDate ",beginDate);
query.setDate( "endDate ",endDate);
聯(lián)系客服