篇前言
很久就想寫這樣一篇在日常開發中見到的錯誤解決總結了,一直以時間爲藉口而疏於整理,現在終於下定決心了.哪就要一直寫下去,好好學習.
問題總結:
1:
爲了實現透明化的延遲加載機制,hibernate進行了大量努力。其中包括JDK Collection接口的獨立實現。
如果我們嘗試用HashSet強行轉化Hibernate返回的Set 型對象:
Set hset = (HashSet)user.getAddresses();
就會在運行期得到一個java.lang.ClassCastException, 實際上,此時返回的是一個Hibernate的特定Set實現“net.sf.hibernate.collection.Set”對象,而非
傳統意義上的JDK Set實現。這也正是我們爲什麼在編寫POJO時,必須用JDKCollection 接口(如Set,Map), 而非特定的JDKCollection 實現類(如HashSet、HashMap)申明Collection屬性的原因。
解決方法:
net.sf.hibernate.collection.Set hs=(net.sf.hibernate.collection.Set) servicebase.getXzfwServiceMaterials();
接着該怎麼操作這個 hs.就和JDK的差不多的方法了.
2:
ckeckbox js 全選功能name命名問題:
jsp中,當做checkbox全選功能時,其name不能命名爲“XXXVO.name”,因爲在js中用document.getElementsById(XXX)時,只能選中一個,而不能像name那樣可以全部選中。
3:
關於hibernate延遲加載的異常 no session or session is closed
但是如果我們採用了延遲加載機制,希望在一些情況下,實現非延遲加載時的功能,在提供一個完整的Bspinq對象時,把所關聯的bspInqParts 信息在session關閉之後仍然可以使用。這就要採用hibernate.initialize方法,可以通過強制加載關聯對象來實現這一功能。
Hibernate.initialize(inq.getBspInqParts());
Session.close(); 搞定。