誰かがこれらのフレームワークのJPA2.0実装の経験を持っているかどうか疑問に思っていましたか?特に、EclipseLinkサポートが付属するSpring3.xと一緒に。
これらのフレームワークとJPA2.0を本番環境で使用していますか?何か重大問題?
IMHO可能な限り、常に標準のAPIを使用することをお勧めします。あなた自身の例はこれを完全に示しています。 1つが期待どおりに機能しなかったときに、2つのプロバイダーで同じコードを試すことができました。ネイティブAPIに切り替えると、これを実行できなくなります。
JPA 2.0プロバイダーとしてEclipseLinkを使用するとうまくいく場合は、それを使用してください。たまたま問題が発生した場合は、EclipseLinkバグを登録して、このフォーラム、またはEclipseLinkフォーラムとニュースグループでヘルプを入手してください。
EclipseLinkはJPA 2のリファレンス実装であるため、より標準に準拠しています。Hibernateにはいくつかのコンプライアンス問題がありますが、より成熟しています。
EclipseLinkの主な利点の1つは、ネイティブSQL関数をJPQLクエリで直接呼び出すことができることです。 Hibernateではこれを直接行うことはできません。
しかし、Hibernateはより大きなコミュニティ、より良いドキュメント、そしてより良いエラーメッセージを持っています。
私の経験から、Java Perf Profilingを使用しています。Eclipselinkを使用して作成したアプリは、データの挿入と取得の両方でHibernateを使用した場合よりもはるかにパフォーマンスが良いようです。ただし、Hibernateはより広く使用されており、大きなフォーラムを提供していますサポートのための。
このため、本番環境では単にHibernateを使用します。
1つだけを選択してください。標準は最終ガイドラインにあり、すべての実装者はそれに応じて標準を実装するか、実装に失敗する可能性があります。
例えば.
EclipseLinkはJPA @Converter
sなどの基本的なものを使用すると問題が発生しますが、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が処理する必要があります。