TSS上面Ganesh同志的文章內(nèi)容是非常有益的,討論了session的這兩個api的區(qū)別。get是每次都會從數(shù)據(jù)庫取數(shù)據(jù)以保證數(shù)據(jù)的可靠。而load則會返回一個proxy,相當(dāng)于一個存根,訪問的時候從當(dāng)前session或者hibernate二級緩存中查找,如果找不到則從數(shù)據(jù)庫中Lazy Load一下。從Hibernate的復(fù)雜性上來說,這個概念應(yīng)該算比較容易理解的,而且這種存在也是非常合理的。順便里面還補充了一下JPA里面也有類似的getReference方法,行為類似load。看完文章你會開始注意這個細節(jié)。
可是,這個細節(jié)的下面卻引起了n多人的討論,討論的核心就是Hibernate是不是有太多細節(jié)了?
很多人說這樣不是OO的,很多人說Hibernate的細節(jié)造成它復(fù)雜,有人說Hibernate影響了他們的工作效率,等等,反正反對者站出來很多。我想這是可喜的。
說明在Java的Killer-APP組合Spring+Hibernate后面還是有很多持懷疑態(tài)度的人的,我們隨時都需要提問題的大腦!
所以,我們也思考一下吧:
1、你一定要盡量的不斷地熟悉你所使用的技術(shù),可以是Hibernate也可以是JDBC,時刻保持對相關(guān)知識的饑渴。這樣減少因為你的無知造成的失誤。
2、思考別人的批評,或者說ORM不好,或者說這種那種ORM不好,你都要聽著,然后思考,然后堅持你思考的結(jié)果,直到下一次思考。這個過程最好保持一定的技術(shù)偏執(zhí),因為沒有性格的程序員不是好程序員。
3、放眼各種技術(shù),了解相似技術(shù),這樣你不會在城頭更換大王旗的時候失業(yè):D。現(xiàn)在我們可以回頭看看JDBC Dataset和JPA,向上向下都要看齊嘛。了解了相似技術(shù)更有助于你的思考。
4、知道你在討論什么,知道背景。你需要知道Hibernate主要在Java or JavaEE中使用,當(dāng)然有Hibernate.net,但是它不怎么火。還有,Hibernate的基礎(chǔ)還是SQL和DBMS,你需要仔細了解這兩種東西。
5、悟道。
Ganesh的原文:
Hibernate - Difference between session's get() and load()
http://gmarwaha.blogspot.com/2007/01/hibernate-difference-between-sessions.html
TSS上的討論:
Difference between Hibernate's get() and load()?
http://www.theserverside.com/news/thread.tss?thread_id=43887
我以前翻譯的Hibernate的session的javadoc,當(dāng)時好像從字面上沒有什么大的區(qū)別,配合這個帖子,要重新想一想:D
http://www.tkk7.com/iamtin/archive/2006/03/06/33910.html
BTW:因為做手術(shù)在家休養(yǎng),所以才有時間發(fā)發(fā)牢騷:D