過去4か月間、中規模のプロジェクトで作業しました-JPAとSpringを使用しています-CRUD画面以上を必要とするプロジェクトでは、JPAは強力ではないと確信しています...クエリインターフェースは貧弱で、HibernateはJPAを尊重しませんhibernate クラス、注釈、および構成を使用する必要がある場合は、常に仕様を変更します。JPAについてどう思いますか?それは十分ではありませんか?
7 に答える
ほとんどの場合、JPA で十分だと思いますが、Criteria API が恋しいです (Hibernate によってのみ提供されます)。
Hibernate は長い道のりでした。そのため、JPA ではまだ利用できない多くの機能があります。しかし、やがて JPA が追いつくでしょう。それまでは、必要に応じて JPA および Hibernate 固有の設定を使用してください。後で切り替える必要がある場合は、はるかに簡単になります。
JPA 2.0、Hibernate Core、Hibernate Search、および Hibernate Validator を社内のラッパー フレームワークを介して組み合わせます。それは私たちが投げるすべてを行います:)
これを Maven と組み合わせると、データベースも構築されます。DBUnit をミックスに追加すると、必要なものがすべて揃います。
Lucene による非常に高速な検索ですが、Hibernate Criteria/HQL クエリの使用は非常に優れています。GWT 提案ボックスの背後にあるこのすべての力は素晴らしいものです。
あなたの特定のケースについて詳しく知らなければ、具体的なガイダンスを提供することはできません. Hibernate の JPA 実装を使用しているようです。Hibernate について気に入らない点がある場合は、他の JPA 実装を試すことができます。クエリ インターフェースに関しては、JPA のクエリが希望どおりに動作しない場合、いつでもプレーンな古い接続を取得して、それを操作することができます。このフレームワークの優れた点は、少なくとも、すべての CRUD コードを再度作成する必要がないことです。JPA が完璧だとは決して言いませんが、些細なことをするために SQL を常に手書きするよりはましです。
私のアドバイスは、単純に Hibernate を使用することです。Hibernate と JPA アノテーションの組み合わせ + Hibernate アノテーションは非常に強力です。クラスパス上のエンティティを自動検出するように EntityManagerFactory を構成することもできますが、その後 getSessionFactory() を呼び出して、アプリケーションでネイティブの Hibernate API を活用できます。Spring を使用している場合は、LocalContainerEntityManagerFactoryBean と HibernateJpaVendorAdapter を使用してこれを行うのは非常に簡単です。
JPAとHibernateアノテーションを使用することの良い点の1つは、永続クラスの自動構成と検出です。また、JPA APIの使用を中断する必要がある時間にもよりますが、10%の時間しか使用していない場合でも、100時間休止状態を使用する場合よりもプロバイダーの切り替えがはるかに簡単になります。クエリの%。
確かに、CRUD操作のために手書きのSQLよりもORMの方が優れています...問題は、純粋なHibernateの代わりにJPAを使用する理由はないと思います。非表示のプロバイダーを取得していないのに、なぜ JPA を使用するのですか?