hibernate的級聯查詢,可不可以用代碼來控制?我現在在配置文件中,有主外鍵關系的表都設置了聯級查詢,但在使用中,並不需要聯級查出所有的表數據,所以想在台后處理中,手動控制一下聯級表,不知道有沒有可能,請高手指點~~~~~
21 个解决方案
一般我用最小配置,配置更新刪除級聯,不配置查詢級聯,需要的時候使用HQL連接查詢。
嗯,你的意思我明白,但有時候 級聯查詢還是有好處的,比如:在頁面顯示多個表數據的時候
我是在用DWR 時候,發現有級聯的List 返回的慢,才有了這個問題~~~,不知道朋友們在項目里都是怎么用的?請教了~~~~
3Q 我研究一下,hibernate 用的還不熟,謝謝了~~~呵
需要的時候使用HQL級聯查詢,不需要就不用,這樣靈活方便
沒有特殊操作 不過很麻煩 根據參數使用某個屬性來取消延遲 讓他在查詢之后迅速加載(假像...)
級聯查詢別人認為怎樣我不管 但是有時候需要 有時候不需要 那就不如不用 需要的時候再手動查 一對一或者多對一可以用 但是一對多 那就絕對不要用
舉個很簡單的例子,比如你的customer類對應很多orderform類
class customer{
private Set orderforms;
}
如果要在加載user的時候加載orderforms對象,可以如下處理:
session.get(User.class,userId);
Hibernate.initialize(user.getOrderforms());
這樣就實現了級聯加載
試試這個:
session.createCriteria(TestUser.class).setFetchMode("arg0", FetchMode.LAZY);
嗯,比較贊同1樓的方法。級聯查詢看上去很美,實際上使用的時候很容易產生大問題。我曾經接手過一個程序,數據庫什么的設計得都不錯,功能也全,不過在運行時每次都幾乎查詢所有的表,有時甚至還要載入,客戶瘋了,我半瘋,最后花了很長時間來修改后台,但是沒有重寫,最終還是沒弄利索,治標不治本。從此以后但凡數據庫我都設置為手動查詢,除非特別有把握的,基本不關聯表格。
最近看了一下hibernate 級聯的資料,沒有想像的那么糟糕,hibernate完全可以通過代碼來控制級聯的條件,深度,結論是:HIBERNATE 確實是非常方便的(個人見解~~),呵呵,結貼了,謝謝朋友們的參與~~
額,最后也不說明下樓主最后的解決方案是什么? 設置Lazy=true?還是.setFetchMode("arg0", FetchMode.LAZY);
我找到最后的解決方案了,在相應的映射文件里設置lazy=‘true’ fetch=‘select’
設置lazy的目的在於懶加載,當訪問到級聯表的數據時才加載
而select在於使用額外sql語句來查詢