採訪Gavin King(待續)

 

gk

您能告訴我們您最近在忙啥?

我是hibernate項目的創始人,這是個open source ORM的java解決方案。我最近加入了JBoss公司,所以我可以全身心投入hibernate的開發,支持,培訓以及諮詢方面的工作。同時我也通過JCP在做java持久層標準化的工作。我剛剛和Christian Bauer寫完一本叫"Hibernate in Action"的書。

您認爲hibernate成功嗎?
因爲hibernate優雅地解決了經常遇到的問題,而且是個open source和它的實用性,所以很成功。我們認真地認爲OO思路應該和關係數據庫流暢地在一起工作。

 

什麼是您發明hibernate的主要動機?
我想要解決有趣的問題,這個問題對我個人很吸引。我之前對利用EJB2 entity bean來寫持久層代碼感到很惱火。
還有一點,我想贏得和老闆的爭論:)

 

你認爲EJB3的發佈會減小hibernate的需求嗎? 這對兩者有何好處?譬如說在BMP環境下?
EJB3只是個規範。hibernate會實現這個規範。所以你可以同時使用這2種技術:) 或者有些人對標準化的東西並不十分關心的話,他們還是可以繼續使用hibernate。尤其是JSR-220還沒標準化的時候。

 

你對Java 5.0的元數據怎麼看?你打算支持元數據嗎?這真的能替代hbm.xml?
當然!Emmanuel Bernard 正在實現EJB 3.0 hibernate對元數據的支持,而且我們還要擴展hibernate自己的元數據。
我們已經看到很多人用XDoclet元數據來定義hibernate mapping。我確信會有更多人會喜歡JSR-175 annotations。
事實上,我很期望這能在ORM變得普及。

 

Generic會改變hibernate的代碼嗎?
這不是個大問題。hibernate已經存在模板化的集合類,所以你可以在你的domain model裏面得到強類型集合。模板化的集合類甚至可以猜測出關聯對象的類型,以及減少你需要寫的元數據。但是我認爲這不是ORM的重大新特性。

 

你希望JDBC API能做些改動使得hibernate更好更快?

使用JDBC batch update API 來批處理不同的SQL語句。(目前你只能在同一個SQL語句裏面設置不同參數)但是我也不想看到很多JDBC的新特性。我只是非常希望廠商能夠提供全面的可靠的已經存在JDBC3裏面的特性。事實上不同數據庫廠商各有自己不遵守規範的地方,而且他們也不關心這些。

 

你能告訴我們hibernate3有哪些新特性?它們能帶給用戶哪些益處?

最大最革新的新特性是支持參數化" filters ".這可以使你得到查找到的數據的子集。這對於處理temporal, versioned, regional, 以及permissioned 的數據特別有用。事實上,我希望大多數的業務對象使用這個特性,這將成爲hibernate不可缺少的特性。

我們還作了大量工作來增強mapping的靈活性,來支持更加複雜(甚至殘破)的關係模型。當這些特性整合在一起,hibernate可以應付任何瘋狂的數據庫,譬如老的現存數據庫。而且,它能允許你用自己手寫的SQL來覆蓋hibernate生成的SQL語句。這給了DBA用手動的方式來自由調試性能。

還有些大的新特性是使我們向JSR-220靠攏。

最後,我們用了大量精力改善細節使新手上手更加方便。希望這能減少hibernate論壇FAQ的提問!


哪些人應該使用hibernate?

如果你要開發比較複雜的應用就能使用hibernate(我一般認爲只有10張表或者更少的應用就可以算是比較簡單的應用)。不是每個應用都需要domain model,因此不是每個應用都需要ORM。但是如果應用包含很多業務邏輯,也就是說應用不只是簡單把表裏面的數據展示在頁面,在這種情況下實用domain model 是個好辦法。

hibernate真正發揮威力的時候是涉及複雜數據模型,使用上百個表以及之間複雜的對應關係。對於這樣的應用來說,hibernate可以降低大約25%的代碼工作量。而且比手工調JDBC的效率高。這是因爲有些性能優化很難靠手工代碼優化: caching, outer-join fetching, transactional write-behind 等等。

 

 

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