[解決済み] どちらのアノテーションを使用すればよいですか?IdClass と @EmbeddedId のどちらを使用すればよいですか?
2022-05-09 22:21:37
質問
は
JPA
(Java Persistence API)の仕様では、エンティティの複合キーを指定する方法が2種類あります。
@IdClass
と
@EmbeddedId
.
私はマッピングされたエンティティに両方のアノテーションを使用していますが、これは
JPA
.
複合キーの指定方法を1つだけ採用したいのですが、どうすればいいですか?本当はどれが一番いいのでしょうか?なぜですか?
どのように解決するのですか?
私は、次のように考えています。
@EmbeddedId
の方がより冗長であると思われます。
@IdClass
では、フィールドアクセス演算子を使って主キーオブジェクト全体にアクセスすることはできません。そのため
@EmbeddedId
とすると、このようになります。
@Embeddable class EmployeeId { name, dataOfBirth }
@Entity class Employee {
@EmbeddedId EmployeeId employeeId;
...
}
これは、複合キーを構成するフィールドが、フィールドアクセス演算子を通じてアクセスされるクラスに集約されているため、明確な概念を示しています。
もう一つの違いは
@IdClass
と
@EmbeddedId
は、HQLを書くときです。
と
@IdClass
と書くのです。
select e.name from Employee e
と共に
@EmbeddedId
と書かなければならない。
select e.employeeId.name from 従業員 e
同じクエリに対して、より多くのテキストを書かなければならないのです。が推進するような、より自然な言語とは異なるという意見もあるかもしれません。
IdClass
. しかし、あるフィールドが複合キーの一部であることをクエリからすぐに理解することは、ほとんどの場合、非常に有益なことです。
関連
-
Intellij IDEAのエラー「CreateProcess error=2, system could not find specified file」に対する完璧な解決策です。
-
自動配線された依存性のインジェクションに失敗しました。
-
[解決済み] JavaでArrayListではなくLinkedListを使用するのはいつですか?
-
[解決済み] serialVersionUIDとは何ですか、またなぜそれを使用する必要がありますか?
-
[解決済み] java.net.URLConnectionを使用してHTTPリクエストを発生させ処理する方法
-
[解決済み] なぜゲッターとセッター/アクセッサーを使うのですか?
-
[解決済み] JPA EntityManager。なぜmerge()ではなくpersist()を使うのか?
-
[解決済み] ThreadLocal変数はいつ、どのように使用すればよいですか?
-
[解決済み] Javaの@Overrideアノテーションはいつ使うのか、なぜ使うのか?
-
[解決済み】Android UserManager.isUserAGoat()の正しい使用例?)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
エラー java.util.NoSuchElementException
-
スタイルが読み込まれず、ブラウザのコンソールでエラーが報告される。リソースはスタイルシートとして解釈されますが、MIMEタイプtext/htmlで転送されます。
-
SpringBootApplication を型解決できない。
-
Eclipseで "XXXX "の解決策を(型に)解決することができない
-
JDKの設定時にjava.dllが見つからない、java SE Runtime Environmentが見つからない問題が発生しました。
-
spring-boot 401 このリソースにアクセスするには完全な認証が必要です エラー解決
-
Javaエラーメッセージがenclosingクラスでない
-
SocketTimeoutExceptionです。読み込みがタイムアウトしました
-
JSPで「リストが型解決できない!」の解決方法
-
java -serverコマンドで「Error: no `server' JVM at ... jvm.dll」を解決する方法です。