2011-01-09 102 views
11

關於將由完整Java EE應用程序服務器提供服務的Java EE Web應用程序,例如GlassFish,這是最好的ORM解決方案? EJB 3Hibernate 3 爲什麼?EJB 3或Hibernate 3

+1

有很多其他持久性解決方案具有明顯的優勢;你似乎在你的問題中忽略了他們,所以任何「最好」的答案都是任意的。可能最好的依賴於應用程序本身,正在編寫它的開發人員以及正在使用的數據存儲......並且您還沒有提供有關這些信息 – DataNucleus 2011-01-09 18:38:12

回答

27

這兩個是完全不同的。

EJB3是一個組件模型,它本身沒有任何與ORM直接相關的東西。它有助於輕鬆管理事務,並讓您可以輕鬆地從JPA獲得實體管理器,這是Java EE中的標準化ORM解決方案。 (3)確實是一個ORM解決方案,並且正好碰到了一個實現JPA的解決方案。

所以更合乎邏輯的問題是使用標準化的JPA接口還是直接使用Hibernate核心API。然後,後續問題可能是是使用JPA獨立還是與EJB 3結合使用。

答案取決於您確切需要什麼,但通常將JPA與EJB 3結合使用是最簡單的解決方案。使用JPA或Hibernate standalone需要更多詳細的代碼,而且您需要手動管理事務,這可能會很痛苦。

JPA vs Hibernate是另一場辯論。 JPA具有標準化接口的好處,因此更多的開發人員可能會熟悉它。另一方面,原生Hibernate API總是超級JPA的集合,因此提供更多的功能。

通常開發人員主要將他們的代碼基於JPA,然後在有意義的地方使用一些Hibernate特定的註釋或API調用。在99.99%的情況下,支持混合API使用。

還要注意Glassfish與EclipseLink捆綁在一起,而不是Hibernate。 EclipseLink可以與Hibernate相媲美,但它早於十年。 Hibernate從EclipseLink中獲得了很多(當時稱爲TopLink)。

另見這個答案我給了一個類似的問題:Database table access via JPA Vs. EJB in a Web-Application

-1

它們是相似的; EJB的3.0規範花了很多時間從Hibernate和Spring。

我沒有任何一個報價的公司指標,但我會說,如果您擁抱Glassfish,那麼使用它的所有技術對我來說都是有意義的。爲什麼引入另一個依賴?看看Glassfish是否能爲你做這項工作。

5

你問什麼是API更好:EJB3(JPA)或休眠?我之所以這麼說,是因爲你在問EJB3 JPA(只有API)和Hibernate(這是實現和API)。因此,爲了比較蘋果和蘋果,你需要比較API。您可以選擇標準(JPA)和更強大的專有API(Hibernate)。

但是通過選擇JPA還有另一個選擇:實現。通過選擇Hibernate實現,基本上可以拋棄你的問題,因爲JPA和Hibernate都可用。所以你的問題會改變:我應該選擇哪種JPA實現(在Hibernate,EclipseLink,OpenJPA,DataNucleus等之間)?...

+0

請注意* EJB3(JPA)*可能稍微有點混亂。它表明EJB3是JPA的另一個名稱,但事實並非如此。它在技術上已經是EJB 3.0中完全獨立的規範,並且已經在當前的3.1版本的EJB中形式化了。 JPA在技術和組織上都不是完全不同的規範。您無法以任何方式交換條款。 – 2011-01-10 22:21:06