2010-07-13 5 views
20

Ich frage mich, ob jemand Erfahrung mit der JPA2.0-Implementierung eines dieser Frameworks hat? Besonders in Verbindung mit Spring3.x, das mit EclipseLink-Unterstützung geliefert wird.Hibernate oder EclipseLink für JPA?

Verwenden Sie eines dieser Frameworks und JPA2.0 für die Produktion? Any schwere Probleme?

Antwort

16

IMHO Es ist immer besser, wenn möglich eine Standard-API zu verwenden. Ihr eigenes Beispiel zeigt dies perfekt. Sie konnten Ihren identischen Code bei zwei Anbietern testen, wenn einer nicht wie erwartet funktioniert. Der Wechsel zu einer beliebigen nativen API verhindert dies.

Wenn Sie EclipseLink als JPA 2.0-Provider verwenden, können Sie es verwenden. Wenn Sie auf ein Problem stoßen, sollten Sie einen EclipseLink-Fehler einreichen und Hilfe zu diesem Forum oder den EclipseLink-Foren und Newsgroups erhalten.

23

EclipseLink ist standardkonformer, da es die Referenzimplementierung für JPA 2 ist. Hibernate hat einige Kompatibilitätsprobleme, ist aber ausgereifter.

Einer der Hauptvorteile von EclipseLink ist, dass Sie native SQL-Funktionen direkt in Ihren JPQL-Abfragen aufrufen können. In Hibernate ist dies nicht direkt möglich.

Aber Hibernate hat eine größere Gemeinschaft, bessere Dokumentation und auch bessere Fehlermeldungen.

+1

Ich stimme nicht zu. Die Tatsache, dass Sie RI sind, macht Sie nicht mehr konform, und ich habe bei beiden Implementierungen Probleme bekommen, obwohl sie JPA 2.0-konform sein sollen, siehe [diese Frage zum Beispiel] (http://stackoverflow.com/questions/3014313/jpa) -2-Kriterien-api-why-is-isnull-ignoriert-wenn-in-Konjunktion-mit-gleich. Die TCK ist einfach nicht erschöpfend. –

+0

@ pascal-thivent, EclipseLink JPQL-Implementierung ist in der Tat mehr Standards konform als Hibernate. Und das RI bringt dich in eine Art Referenzposition. –

+0

Da ich auf Kompatibilitätsprobleme mit beiden gestoßen bin, ist meine Referenz die Spezifikation, ich habe gelernt, dass ich EclipseLink nicht als "Referenz" verwenden kann. –

4

Aus meiner Erfahrung mit Java Perf Profiling. Meine mit Eclipselink erstellten Apps scheinen sowohl beim Einfügen als auch beim Abrufen von Daten viel besser zu funktionieren als mit Hibernate. Hibernate wird jedoch häufiger verwendet und bietet ein größeres Forum für die Unterstützung.

In der Produktion werde ich einfach Hibernate aus diesem Grund nehmen.

0

Einfach mit einem auswählen und kleben. Standards sind nur am Ende Richtlinien und jeder Implementierer kann die Standards implementieren oder nicht implementieren.

z.B.

  • Eclipse hat Probleme etwas Grundsätzliches wie JPA mit @Converter s obwohl angeblich kürzlich durch IBM Fest http://www-01.ibm.com/support/docview.wss?uid=swg1PI73277

  • Hibernate JPQL Implementierung Boolesche Werte nicht versteht, dass mehr für sich allein stehen speziell musste ich ändern JPQL zu sagen

    from Participant p where not p.cancelled

    zu

    from Participant p where p.cancelled = false

Die andere Sache ist, Sie bauen Dinge im Frühjahr und Sie sind wahrscheinlich das falsche, aber gemeinsames Konzept der Änderung der Klassenlader PARENT_LAST tun, um gehen, damit Ihre Klassen verwendet werden, anstatt die Anwendungsserver.

Wenn Sie vorhaben, den richtigen Weg zu gehen und die JPA zu verwenden, die mit dem Anwendungsserver geliefert wird, seien Sie vorsichtig, da Ihre Application Server-Implementierung fehlerhaft sein kann.

Transaktion weise Ihre Anwendung, speziell Frühling müssen die Dinge für Sie.