2009-02-23 72 views
33

我已經使用了以下JPA實現的:JPA實現 - 哪一個最適合使用?

  1. 休眠,
  2. 的Toplink,
  3. OpenJPA的

他們每個人都有自己的長處和短處。我發現Hibernate是三者中最先進的,只是它將自己的一些增強功能與JPA混合在一起,這使得難以轉向其他提供者。最重要的是,它的查詢解析器在解釋JPA時要寬鬆得多。他們讓獲得正確的庫支持hibernate有點困難,因爲我發現它試圖獲得所有依賴關係的正確版本。

Toplink沒問題,但有人覺得它有點跛腳,因爲看起來Oracle希望你使用/購買?他們更高級的圖書館。試圖下載它也是一項任務,因爲你需要通過運行jar文件來安裝它。我發現它只實現了基本的JPA規範。我使用它的原因是hibernate使用了很多其他開源項目中常用的庫,這些庫經常會遇到classloarder問題,尤其是在使用JBoss時。OpenJPA - 這是迄今爲止最好的文檔,很容易下載和使用,但它似乎是它的錯誤。也許它只是我的代碼,但代碼我發現更高級的用法,如與CascadeType.all設置OneToMany關係似乎沒有工作。誠然,這可能是我的代碼錯了,我沒有時間去測試一個乾淨的案例,但是很多這樣的事件讓我害怕使用它。我真的希望它變得更好。它的錯誤信息通常無助於解決問題。

什麼其他圖書館有人使用,他們更喜歡哪些,爲什麼?

回答

17

我對這些實現有相同的結論。

  1. 的OpenJPA是/似乎馬車

  2. 休眠過萬噸的庫,似乎有麻煩懶加載的一切。

  3. Toplink最終成爲我的選擇。它並不像Hibernate那樣靈活,但它可以工作,我不需要安裝commons-logging

接下來我會嘗試的是JPOX,它最近更名爲datanucleus

+8

EclipseLink比所有這些都好(imho)。 – cletus 2009-02-23 06:32:40

+2

objectdb呢? www.objectdb.com – user3111525 2014-01-19 13:58:31

6

就我個人而言,我覺得OpenJPA還不夠成熟。還有其他的開源庫更成熟,我寧願使用它們。這些是我會考慮的順序:

  1. Hibernate。 Hibernate已經存在了很長時間,並且已經爲Java中的ORM鋪平了道路。我與Hibernate的唯一問題是許可。這是LGPL許可,這可能會導致一些商業公司扭轉(因爲我不會在這裏進入)。無論如何,如果LGPL對你來說是一個問題,那麼清楚指導可能是件好事。

  2. EclipseLink。 eclipselink上的一些背景。Toplink Essentials是Oracle免費版的JPA實施。 EclipseLink取自Toplink,這是Oracle全面實施的JPA。 EclipseLink將成爲Glassfish v3.0的JPA 2.0提供商,因此看起來所有東西都從Toplink Essentials轉移到EclipseLink。雖然EclipseLink版本僅爲1.0.2,但該產品在其他名稱下已經存在很長時間了。

我正在使用的一個項目是在Toplink Essentials上,但我們計劃很快切換到Eclipselink。 Hibernate出於我前面提到的許可問題。

4

OpenJPA被稱爲Kodo,這是BEA很早以前購買的。 Kodo是JDO和現在的JPA的實現。另外,我們使用OpenJPA相當集中。因此,我並不是說它不成熟。這很好但是我會建議使用Hibernate,即Hibernate的JPA封裝。

原因? 1)JPA與Hibernate非常相似 2)許多職位都有Hibernate要求。最好是傾向於主流產品......基本上