2013-01-13 68 views
2

據我所知,Hibernate有兩種實現爲什麼需要傳統的Hibernate?

  1. 實現JPA(2)(@實體@表註釋)
  2. 擴展到舊的(傳統的)休眠(無JPA),HSQL查詢沒有註釋

如果它是真的,爲什麼我們需要第二種類型的實現,而JPA是ORM規範? 如果您可以在比較API版本的同時進行比較,那麼可以更好地瞭解ORM的整個評估歷史記錄? 謝謝。

回答

2

Hibernate是JPA規範之前的第一個ORM工具之一。它也是Java 5之前的開發者(當註釋在Java中可用時),所以所有的東西都是基於XML配置的,或者是XDoclet。

對Java EE進行了大規模的改造,Java EE引入了Spring和Hibernate,引入了JPA,但也是「通用」的,可以插入自己的實現。

hibernate的工作方式並沒有真正的區別,只是用什麼機制來配置它。 JPA註釋現在成爲標準,但只有在需要時纔可以使用XML。

+0

hibernate-jpa-2.0-api-1.0.0.Final.jar覆蓋了它們嗎?它是最後一個嗎? –

1

有沒有這樣的事情兩個不同的 Hibernate的實現 - 只有一個官方實現。你可以通過註釋/ JPA特性來使用Hibernate,或者通過顯式的Hibernate類來使用Hibernate;但是底層的Hibernate庫將是相同的。

JPA只是Hibernate(和其他類似的庫)實現的接口。

歷史告訴我們,早在九十年代後期,有人發明了EJB。 Java社區普遍認爲沒有人喜歡它,許多人只是使用Hibernate或類似的框架。直到EJB 3.0時,EJB的持久性才根據Hibernate的工作原理進行了相當多的建模(注意EJB中還有其他類型的bean,而不僅僅是數據映射)。

0

據我所知,Hibernate的註釋是從3.2版本開始引入的;我並不是在談論JPA批註(javax.persistence包),而是可以在hibernate-annotations包中找到的特定於hibernate的批註。

幾乎所有你可以用hibernate特定的註釋做的事情,你現在也可以用JPA2做。如上所述,JPA只是一個接口,當你編寫代碼到這個接口時,你會更容易(至少在理論上)將底層的ORM提供者替換爲另一個,比如TopLink,OpenJPA或者Eclipselink(如果你需要)