2010-12-02 7 views
1

私はここ数ヶ月、数週間でHibernateとJPAのマッピングをよくしました。私のDBは複合主キーを使用しており、私は約10〜15個のHibernateと5-10個のEclipseLinkバグを報告しています。 Hibernateは、動作しなければならない特定のコンステレーションでは特にばかげています。JPA/Hibernate:すべてのJPAマッピングが正しく取得されない場合、ORM(Hibernate)はどのような用途に使用されますか?

大きな問題がある(私は専門家やJPAの本の作者によって確認されたコードを持っていた):

何の使用それはすべて JPAマッピング権利を取得しないORMはありますか?

ハイバーネイトにはたくさんの機能が用意されています。私は、開発者が過去のメタデータモデルを作成することさえできないときに、誰が気にしているのだろうかと思います。だからもう一度、使用されないとORMが使用されますすべて JPAマッピングは正しいですか?

+0

私は複数のプロジェクトで4年間使用していますが、重大な問題はありませんでした。したがって、問題はあなたでなければなりません; – Bozho

+0

HibernateとEclipseLinkを使用して、JPA 1.0 @IdClass、JPA 1.0 @EmbeddedId、JPA 2.0 @IdClass、およびJPA 2.0 @EmbeddedIdの4つの可能な複合主キーのバリエーションを使って、問題は間違いなく複合キーをひどく処理するHibernateです。複合主キーを使用しないか、JPA 1.0 @IdClass実装を使用しています。これらは、Hibernate(3.6)で安定している唯一のものです。 – Kawu

+0

これは炎ベイトです。私は、あなたが他の答えに対して開いているようには思えません。「はい、そうです!JPA 2の完全な仕様を実装していないORMは役に立たない」私は、あなたが休止状態についてのあなたの不満を放棄し、他の人によって安心したいと思っているように思えます。 SOは、このようなコミュニケーションのための適切な場所ではありません。 – paprika

答えて

5

ORMはツールです。その文を深く熟考してください。

この技術では、Hibernateがこの場合、特定のドメインで十分に普及していれば、それは銀色の弾丸であり、それを使用しなければならないと信じられています。

これは明らかに間違っています。 Hibernateは、適切に使用されるべきツールです。

Hibernateの作者は、マッピングがxmlやアノテーションを使って定義されている新しいプロジェクトに最適であると言って、Hibernateはデータベース用のDLLを生成し、すべてのテーブルとリレーションシップを作成します。

逆は、特に正規化されていないテーブルと複合主キーがある場合は、非常に扱いにくいことがあります。

これは、Hibernateが自動インクリメントしている主なサロゲートキーの使用を強く推奨する理由です。

JPAリバース・マッピングを適切に行うことは、野生のあなたを待っている多くのコーナー・ケースでは挑戦です。そのため、これらのバグをすべて修正してレポートすることで正しいことをしています。永続性がさらに強化されれば、マッピングを完全に行うことができると確信しています。それ以降のすべては、最初の部分が常に最も難しいので、はるかに簡単です。

+0

私はサロゲートキーの使用を推奨しているだけで、コンポジットキーのマッピングを正しく取得することに問題があると考えていると思います。 JPA 1.0とJPA 2.0と@IdClassと@EmbeddedId複合キークラスマッピングを使用して、ここ数週間にわたり広範なテストを行いました。結果:Hibernateは4(JPA 1.0 @IdClass)の1つしか管理しませんが、EclipseLinkは4つのうち3つ(JPA 1.0 @IdClass、JPA 1.0 @EmbeddedId、JPA 2.0 @IdClass)を管理するため、Hibernateはほとんど役に立たず、本当の原因をデバッグするために)、最終的にはHibernateを市場で2番目の選択肢にするだけです。 – Kawu

+0

ORMツールが劣っているために私のDBを変更するつもりはありませんが、うまく機能するか、少なくともバグが修正された別のものに切り替えたいと思います。フォーラムでEclipseLink開発者が遭遇することがあり、バグレポートを作成するよう促しました。同じことがHibernateで起きたことはないので、Hibernate開発者が他のものに取り組んでいると感じることがあります。フロントサイド(マッピング!)がうまく動作していないときに、ソフトウェアの裏側部分を強化するのはかなり馬鹿だと思います... – Kawu

+0

@カワ:おそらくHibernateの開発者はバグを作成するように促すのではなく、レポート。 – darioo

3

JPAで問題が発生しても、すべての実装のテストケースを作成し、ORMの動作とコミュニティの反応を比較します。 Hibernateははるかに最悪です - 彼らのJPAバグは見ていません。 OpenJPAは、EclipseLinkの機能には多少似ていますが、安定しています。 EclipseLinkにはまだ時間がかかるバグがありますが、アクティビティと頻繁なアップグレードがあります。メーリング・リストの私の質問はすべて、Oracleの人々によって専門的な方法で答えられました。現在、EclipseLinkが優勝者であるようです。私は問題なくコンポジットプライマリキーを使用しています - それらがなければ、二次ユニークインデックスが必要です。コンポジットキーでエンティティを検索することができて代理キーの回避策が私の言い訳になるように思えるのは本当に便利です。 EclipseLinkでは、enumを主キーとして使用することもできます。これは、システムの動作を制御する多数の小さなルックアップテーブルで本当に便利です。 http://opensource.atlassian.com/projects/hibernate/browse/JPA-7

+0

あなたの発言をありがとう。私はENUM PKの問題をHibernateで言及してくれて本当にうれしく思います。これは私の次のDB拡張の1つのテーブルのために作成したものです。 – Kawu

+0

更新:Hibernateの「ENUMとしてのPKの問題」が解決されているようです。私はHibernate 3.6.0でそれを試しました。 em.find(...)を使用して、複合PK内にENUMを持つエンティティを見つけることは問題ありません。 – Kawu

関連する問題