2016-03-06 12 views
7

質問:休止状態5と型付き基準クエリ(JPA2)

1)私は5.xのをHibernateにHibernateの4.xからアップグレードする場合、私はまだ「古い」基準クエリ、または唯一の新しいを使用することができます型付き JPA2基準のクエリ?古いものは推奨されていませんか?または両方を同時に使用できますか?

2)私は新しい型指定された基準は、このようにクラスの数を複製、私はのために私が持っている各 Entityクラスを第二のクラスを作成するために強制することを正しく理解していましたか?私は手でこれらのクラスを作るはずですか?そうでない場合、どうですか? Rant:クラスを複製することは奇妙に見えるので、何とかそれを誤解する必要がありますか?それは過労ではなく、不必要に複雑なことではないのですか?

答えて

10
  1. いいえ、古い基準APIは推奨されていません。 the javadocを参照してください:廃止予定の警告はありません。しかし、私は標準のJPA APIに固執し、独自のHibernate APIと組み合わされた標準JPA APIを使用しないことをお勧めします。

  2. いいえ、強制しません。引き続き文字列識別子を使用できます。しかし、型安全性が目標である場合は、メタモデルクラスを使用することを強くお勧めします。

もちろん、これらを手作業で生成する必要はありません。それらはan annotation processorによって生成され、エンティティクラスとマッピングアノテーションから生成されます。 root.get(MyEntity_.firstName)root.get("firstName")よりも安全に使用するとコンパイル時に誤検出が発生し、フィールドをfirstnameにリファクタリングすると、古い"firstName"文字列識別子を使用する代わりにエラーが生成されます。

私は依然として、書く、理解し、維持するのがはるかに簡単で、複数の基準に基づいて動的クエリを生成する必要がある場合にのみ条件APIを使用します。自動テストを使用して、クエリが正しいかどうかを確認します。同じように、基準クエリでも、BTW。

+0

フィールドをfirstnameにリファクタリングすると、コンパイラはエラーを生成するか、注釈プロセッサは直ちに 'MyEntity_.firstName'を' MyEntity_.newName'に変更しますので、エラーは発生しませんか? – MarcG

+0

注釈プロセッサは、MyEntity_.firstNameをMyEntity_.newNameに変更します。したがって、MyEntity_.firstNameを使用していたコードのすべての場所でコンパイルエラーが発生します。 –

+2

もちろん、注釈プロセッサはIDEを介してリファクタリングを行っていないためです。 Jeez私はこの新しい基準を本当に嫌いです。あなたが示唆したように、私たちの自動化されたテストはすでにすぐに文字列識別子エラーを捕まえるので、私はポイントが変わるのを見ません。古いHibernate Criteriaの可読性ははるかに優れており、それが最も重要なことです。情報をありがとう。 – MarcG