單件HibernateTemplate的setMaxResults的問題

http://blog.sina.com.cn/s/blog_56b7aaa10100e9xo.html


HibernateTemplate指的就是spring裏面,一般注入給DAO類的模板類,取得方式爲getHibernateTemplate()。可以有兩種方式注入DAO而取得封裝過的模板類。一種是注入LocalSessionFactoryBean,一種是直接注入HibernateTemplate。無論是那種,都可以直接getHibernateTemplate()。而由於HibernateTemplate是輕量級的,所以,注入LocalSessionFactoryBean,每次獲取新的HibernateTemplate也不是問題。不過,由於HibernateTemplate是線程安全的,所以可以考慮給DAO類注入同一個HibernateTemplate對象。

到了這裏,問題就開始了。Hibernate查詢有限條數據時,由於考慮使用標準hql,兼容不同數據庫查找,應該採用query.setMaxResults(int count);而不應使用類似於“ limit 15 ”這樣的hql語句。HibernateTemplate提供了setMaxResults()方法。但是,如果你採用單件模式的HibernateTemplate,在第一次使用setMaxResults()後,其他DAO在執行查詢的時候,都會自動加入類似“ limit x ”這樣的語句。這先讓不是我們想要看到的。看spring源碼就知道HibernateTemplate持有private int maxResults的變量,默認值是0,每次查詢前都會去讀取該變量。查詢完成時,也不會自動重置該變量。貌似沒看到別人提起這個。我自己的解決辦法只能是,在每次執行完查詢之後,手動進行一次getHibernateTemplate().setMaxResults(0)。這樣就不會對其他查詢產生影響了,但總覺得這種做法有些不和諧,不知道其他人是否有什麼解決辦法。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章