hibernate 怎么控制 級聯查詢?跪求指點~~~~


hibernate的級聯查詢,可不可以用代碼來控制?我現在在配置文件中,有主外鍵關系的表都設置了聯級查詢,但在使用中,並不需要聯級查出所有的表數據,所以想在台后處理中,手動控制一下聯級表,不知道有沒有可能,請高手指點~~~~~

21 个解决方案

#1


一般我用最小配置,配置更新刪除級聯,不配置查詢級聯,需要的時候使用HQL連接查詢。

#2


嗯,你的意思我明白,但有時候 級聯查詢還是有好處的,比如:在頁面顯示多個表數據的時候

#3


引用 1 樓 apollo_ts 的回復:
一般我用最小配置,配置更新刪除級聯,不配置查詢級聯,需要的時候使用HQL連接查詢。

受教了

#4


我是在用DWR 時候,發現有級聯的List 返回的慢,才有了這個問題~~~,不知道朋友們在項目里都是怎么用的?請教了~~~~

#5


那可試驗一下懶加載【lazy配置】。

#6


3Q 我研究一下,hibernate 用的還不熟,謝謝了~~~呵

#7


需要的時候使用HQL級聯查詢,不需要就不用,這樣靈活方便

#8


引用 7 樓 lewis219 的回復:
需要的時候使用HQL級聯查詢,不需要就不用,這樣靈活方便


我說的就是這個問題啊,可不可以在代碼中控制呢???

#9


引用 8 樓 ibookvip 的回復:
引用 7 樓 lewis219 的回復:
需要的時候使用HQL級聯查詢,不需要就不用,這樣靈活方便


我說的就是這個問題啊,可不可以在代碼中控制呢???


可以 先把LAZY設置成TRUE 然后通過一個參數判斷是否取消延遲加載

不過不推薦級聯查詢 這是個敗筆..

#10


引用 9 樓 bearkin 的回復:
引用 8 樓 ibookvip 的回復:
 引用 7 樓 lewis219 的回復:
 需要的時候使用HQL級聯查詢,不需要就不用,這樣靈活方便


 我說的就是這個問題啊,可不可以在代碼中控制呢???


 可以 先把LAZY設置成TRUE 然后通過一個參數判斷是否取消延遲加載

 不過不推薦級聯查詢 這是個敗筆..




朋友這個方法在代碼里怎么實現的? 怎么寫這個取消延遲的代碼?? 還有 級聯查詢真的很失敗嗎??

#11


沒有特殊操作 不過很麻煩 根據參數使用某個屬性來取消延遲 讓他在查詢之后迅速加載(假像...)

級聯查詢別人認為怎樣我不管 但是有時候需要 有時候不需要 那就不如不用 需要的時候再手動查 一對一或者多對一可以用 但是一對多 那就絕對不要用

#12


舉個很簡單的例子,比如你的customer類對應很多orderform類
class customer{
  private Set orderforms;
}
如果要在加載user的時候加載orderforms對象,可以如下處理:
session.get(User.class,userId);
Hibernate.initialize(user.getOrderforms());
這樣就實現了級聯加載

#13


試試這個:
session.createCriteria(TestUser.class).setFetchMode("arg0", FetchMode.LAZY);

#14


引用 12 樓 tangyanbo1110 的回復:
舉個很簡單的例子,比如你的customer類對應很多orderform類
 class customer{
   private Set orderforms;
 }
 如果要在加載user的時候加載orderforms對象,可以如下處理:
 session.get(User.class,userId);
 Hibernate.initialize(user.getOrderforms());
 這樣就實現了級聯加載



我問的問題,不是怎么級聯的問題,是級聯怎么控制的問題,在一個表與多表級聯的時候,打開所有級聯會有把所有表都查一遍,我想是不是可以有代碼來控制級聯查詢,需要的時候我代碼控制打開,不需要的時候就不級聯查~~

#15


引用 13 樓 islandrabbit 的回復:
試試這個:
 session.createCriteria(TestUser.class).setFetchMode("arg0", FetchMode.LAZY);


OK,3Q,我試一試,我是用HQL查詢~~~

#16


學習。。

#17


嗯,比較贊同1樓的方法。級聯查詢看上去很美,實際上使用的時候很容易產生大問題。我曾經接手過一個程序,數據庫什么的設計得都不錯,功能也全,不過在運行時每次都幾乎查詢所有的表,有時甚至還要載入,客戶瘋了,我半瘋,最后花了很長時間來修改后台,但是沒有重寫,最終還是沒弄利索,治標不治本。從此以后但凡數據庫我都設置為手動查詢,除非特別有把握的,基本不關聯表格。

#18




最近看了一下hibernate 級聯的資料,沒有想像的那么糟糕,hibernate完全可以通過代碼來控制級聯的條件,深度,結論是:HIBERNATE 確實是非常方便的(個人見解~~),呵呵,結貼了,謝謝朋友們的參與~~

#19


額,最后也不說明下樓主最后的解決方案是什么? 設置Lazy=true?還是.setFetchMode("arg0", FetchMode.LAZY);

#20


我找到最后的解決方案了,在相應的映射文件里設置lazy=‘true’ fetch=‘select’
設置lazy的目的在於懶加載,當訪問到級聯表的數據時才加載
而select在於使用額外sql語句來查詢

#21


就是,最后的解決方案也不說,,,,,

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



hibernate的級聯查詢,通過代碼控制 hibernate學習:級聯查詢 級聯查詢案例 單表級聯查詢 多表級聯查詢 MyBatis 的級聯查詢 關於級聯查詢 mybatis同表級聯查詢 sql語句級聯查詢 四級級聯查詢
 
粤ICP备14056181号  © 2014-2020 ITdaan.com