歡迎您光臨本站 註冊首頁

Hibernate的十大罪狀

←手機掃碼閱讀     火星人 @ 2014-03-10 , reply:0

Hibernate確實功能強悍,但在易用性、性能上存在缺陷.如果團隊中沒有一個精通Hibernate的高手,不適合使用Hibernate.

1. 複雜的實體狀態3種實體狀態的設計是種種複雜性問題的根源.在持久化狀態下不需要save就自動同步到資料庫既無必要又容易造成煩惱.

2. Lazy Load 與 Eager Load Lazy Load的概念聽起來不錯,用起來就不那麼妙了,也直接導致產生了Open Session In View這種妥協方案.此外,在domain類中定義的FetchType只針對get/load/loadAll有效,對Query是無效的,需要再次定義.

3. Open Session In View Lazy Load引發的一個有較多副作用的解決方案.

4. 級聯級聯是一個很好很OO的概念,但往往增加了複雜度.

5. 批量更新與緩存不一致Hibernate引入了一級緩存和二級緩存,提供了性能的同時帶來了緩存一致性的問題.批量更新或者其他系統對資料庫的更新容易造成緩存不一致.

6. 配置繁瑣Hibernate最初只能使用xml進行配置,後來終於引入了Annotation和CoC(約定優於配置)來簡化配置,但這種變革並不徹底.Hibernate默認把userName映射userName,但實際開發中,把userName映射為user_name的情況更多些.

7. HQL HQL是一個類SQL對象查詢語言,但正是因為HQL與SQL的相似性,往往容易造成混淆,同時HQL難以調試,本質創建了一種語言,增加學習成本.

8. 太多的查詢方案HQL、QBC、SQL,就不能統一點,簡潔點?

9. N 1次查詢

10. 性能問題

總之,Hibernate立足於作一個完整的自動化的能夠適應各種環境的ORM,因此帶來了100%的複雜性.但我們實際需要的只是一個簡單的能夠以20%時間解決80%問題的框架,具有對象-關係映射,能自動生成SQL,能夠讓新手儘快工作就足夠了,也許ActiveRecord是一個選擇.


[火星人 ] Hibernate的十大罪狀已經有661次圍觀

http://coctec.com/docs/java/show-post-61860.html