關於hibernate對視圖的操作的一點心得

網上有人描述的情況跟我一樣:

使用MyEclipse hibernate 視圖對ORACLE的視圖進行映射反向生成,比如對ViewResult視圖會生成兩個類,一個hbm.xml文件,其中兩個類名爲:ViewResultId和ViewResult  配置文件爲ViewResult.hbm.xml。那麼使用HibernateTemplate模板類使用find(hql)進行查詢的時候,比如hql="from ViewResult v where v.name='lx'";那麼會出現第一個異常(異常內容明天補上。。。)原因是:視圖沒有主鍵,MyEclipse默認生成的是複合主鍵,即<composite-id><key-property></key-property></composite-id>。id由ViewResult類生成,於是將hql修改爲:hql="from ViewResult v where v.id.name='lx'";發現可以進行查詢不會報錯了,但是卻又發現查詢的內容爲null,這是第二個異常,原因爲:MyEclipse默認生成的複合主鍵,<composite=id></composite-id>中間包括了視圖所有的屬性都爲複合主鍵即<key-property>屬性</key-property>,因爲查詢的記錄裏面某個字段爲null,而主鍵不能爲空,所以導致查詢的記錄全部都null,修改方法爲:將視圖中可以作爲主鍵的屬性放入<composite-id></composite-id>中,其餘的放在外面修改爲<property/>,這個時候查詢又會出現,缺少get或者set方法的異常,所以最終的解決方法就是:把視圖當成一個表,按hibernate常規思路進行配置即可解決,配置主鍵生成策略(視圖沒有主鍵,但是你可以根據業務需求找出一個可以當做主鍵的屬性值),然後配置屬性,這樣就可以把視圖當成一個實體用hql來查詢了。


還有種說法是說把視圖裏面所有null的值填個默認值也能解決查詢爲null的問題。


所以總結出對視圖的操作辦法:

1.把視圖當一個表來配置,在視圖中找一個合適的字段來當主鍵就行。

2.把視圖中所有null的字段都默認給個值,這樣用myeclipse那種聯合主鍵配置的方式也能查詢到數據(此方法在網上查的自己沒試)。

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