web-dev-qa-db-ja.com

JPAのHibernateまたはEclipseLink?

誰かがこれらのフレームワークのJPA2.0実装の経験を持っているかどうか疑問に思っていましたか?特に、EclipseLinkサポートが付属するSpring3.xと一緒に。

これらのフレームワークとJPA2.0を本番環境で使用していますか?何か重大問題?

33
Ta Sas

IMHO可能な限り、常に標準のAPIを使用することをお勧めします。あなた自身の例はこれを完全に示しています。 1つが期待どおりに機能しなかったときに、2つのプロバイダーで同じコードを試すことができました。ネイティブAPIに切り替えると、これを実行できなくなります。

JPA 2.0プロバイダーとしてEclipseLinkを使用するとうまくいく場合は、それを使用してください。たまたま問題が発生した場合は、EclipseLinkバグを登録して、このフォーラム、またはEclipseLinkフォーラムとニュースグループでヘルプを入手してください。

20
Peter Krogh

EclipseLinkはJPA 2のリファレンス実装であるため、より標準に準拠しています。Hibernateにはいくつかのコンプライアンス問題がありますが、より成熟しています。

EclipseLinkの主な利点の1つは、ネイティブSQL関数をJPQLクエリで直接呼び出すことができることです。 Hibernateではこれを直接行うことはできません。

しかし、Hibernateはより大きなコミュニティ、より良いドキュメント、そしてより良いエラーメッセージを持っています。

26

私の経験から、Java Perf Profilingを使用しています。Eclipselinkを使用して作成したアプリは、データの挿入と取得の両方でHibernateを使用した場合よりもはるかにパフォーマンスが良いようです。ただし、Hibernateはより広く使用されており、大きなフォーラムを提供していますサポートのための。

このため、本番環境では単にHibernateを使用します。

8
Tunde Pizzle

1つだけを選択してください。標準は最終ガイドラインにあり、すべての実装者はそれに応じて標準を実装するか、実装に失敗する可能性があります。

例えば.

  • EclipseLinkはJPA @Convertersなどの基本的なものを使用すると問題が発生しますが、IBMによって最近修正されたと思われます http://www-01.ibm.com/support/docview.wss?uid=swg1PI73277

  • HibernateのJPQL実装は、それ自体に依存するブール値を理解していません。具体的には、JPQLを変更して、

    from Participant p where not p.cancelled

    from Participant p where p.cancelled = false

もう1つは、Springでビルドするものであり、アプリケーションサーバーではなくクラスが使用されるように、クラスローダーをPARENT_LASTの順序に変更する不適切で一般的なアプローチを実行する可能性があります。

適切な方法でアプリケーションサーバーに付属のJPAを使用する場合は、アプリケーションサーバーの実装にバグがある可能性があるので、少し注意してください。

アプリケーションのトランザクションに関しては、特にSpringが処理する必要があります。

1