[解決済み] ORMマッピングにおける「所有する側」とは?
質問
とは、具体的にどのようなものなのでしょうか? 所有者側 というのは?マッピング例を交えた解説とは( 一対多, 一対一, 多対一 )?
の説明から抜粋した文章です。 ワントゥーワン をJava EE 6のドキュメントに追加しました。コンセプトを見ることができます。 所有者側 を入れる。
への単一値アソシエーションを定義します。 一対一を持つ別のエンティティ の多重度です。通常 を指定する必要があります。 対象エンティティは、明示的に の型から推論されることが多い。 オブジェクトを参照する。もし の関係は双方向です。 は 非所有者側 を使用する必要があります。 OneToOneアノテーションの要素で リレーションシップフィールドまたは プロパティを持つ。
どのように解決するのですか?
なぜ、所有者側の概念が必要なのか。
双方向関係の所有側という考え方は、リレーショナル・データベースにはオブジェクトのような双方向の関係がないという事実に由来している。データベースには、一方向の関係、つまり外部キーしかない。
所有側」という名前の由来は何ですか?
Hibernateが追跡するリレーションの所有側とは、そのリレーションの 所有 データベース内の外部キー
オーナーサイドという概念が解決する問題とは?
2つのエンティティがマッピングされている場合を例にとると なし 所有する側を宣言する。
@Entity
@Table(name="PERSONS")
public class Person {
@OneToMany
private List<IdDocument> idDocuments;
}
@Entity
@Table(name="ID_DOCUMENTS")
public class IdDocument {
@ManyToOne
private Person person;
}
OOの観点からすると、このマッピングは1つの双方向の関係ではなく 2 別々の単方向の関係。
このマッピングでは、テーブルだけでなく
PERSONS
と
ID_DOCUMENTS
が、3つ目の関連テーブルも作成されます。
PERSONS_ID_DOCUMENTS
:
CREATE TABLE PERSONS_ID_DOCUMENTS
(
persons_id bigint NOT NULL,
id_documents_id bigint NOT NULL,
CONSTRAINT fk_persons FOREIGN KEY (persons_id) REFERENCES persons (id),
CONSTRAINT fk_docs FOREIGN KEY (id_documents_id) REFERENCES id_documents (id),
CONSTRAINT pk UNIQUE (id_documents_id)
)
主キーに注目
pk
について
ID_DOCUMENTS
だけです。この場合、Hibernateはリレーションの両側を独立して追跡します。もし、ドキュメントをリレーション
Person.idDocuments
のレコードを挿入する。
PERSON_ID_DOCUMENTS
.
一方
idDocument.setPerson(person)
のテーブルの外部キーperson_idを変更します。
ID_DOCUMENTS
. Hibernateは
に
を実装するために、データベース上で単方向の(外部キー)リレーションを作成します。
一
双方向のオブジェクト関係
所有する側という概念がどのように問題を解決するのか。
多くの場合、私たちが欲しいのはテーブルの外部キーだけです。
ID_DOCUMENTS
に対して
PERSONS
であり、余分な関連付けのテーブルではありません。
これを解決するには、Hibernate を構成して、リレーション
Person.idDocuments
. ハイバーネートは
その他
の側で、リレーション
IdDocument.person
を追加し、そのために
マップバイ
:
@OneToMany(mappedBy="person")
private List<IdDocument> idDocuments;
mappedByとはどういう意味ですか?
これは、次のような意味です: "関係のこちら側での変更は、すでに でマッピングされる。 は、リレーション IdDocument.person の反対側であるため、必要ありません。 を追加して追跡することができます。
ゴトチャはありますか、結果は?
使用方法
マップドバイ
を呼び出すだけであれば
person.getDocuments().add(document)
の外部キーは
ID_DOCUMENTS
は
NOT
は新しいドキュメントにリンクされます。これはリレーションの所有者/追跡者側ではないからです!
ドキュメントを新しい人物にリンクさせるには、明示的に
document.setPerson(person)
というのは、これは
所有者側
の関係です。
を使用する場合 マップドバイ の場合、所有者側が何であるかを知り、正しい側のリレーションを更新して、 データベースに新しいリレーションの永続化をトリガーするのは、開発者の責任です。
関連
-
エラーが報告されました。リソースの読み込みに失敗しました:サーバーは500(内部サーバーエラー)のステータスで応答しました。
-
Eclipseで "XXXX "の解決策を(型に)解決することができない
-
javax.net.ssl.SSLException: 読み取りエラー: ssl=0xdeae5100: システムコール中の I/O エラー、接続 res
-
コミットには何も追加されないが、未追跡のファイルが存在し、gitで未追跡のファイルに対する完璧な解決策
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] Javaにおけるpublic、protected、package-private、privateの違いは何ですか?
-
[解決済み] serialVersionUIDとは何ですか、またなぜそれを使用する必要がありますか?
-
[解決済み] ORM(Object-Relational Mapping)における「N+1 selects問題」とは?
-
[解決済み] Vimのマッピングコマンドであるremap, noremap, nnoremap, vnoremapの違いは何ですか?
-
[解決済み] JPA OneToMany/ManyToOne 双方向アソシエーションにおける「アソシエーションの逆側」とは何ですか?
最新
-
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 Exceptionが発生しました エラー解決
-
myeclipseでコンパイルするとAntエラーが発生する javaの例外が発生しました。
-
Spring Boot による HTTPS アクセスの設定
-
Javaクラスローダーにソースコードから潜り込む
-
プロジェクトの依存関係を解決できなかった 解決
-
SocketTimeoutExceptionの解決方法です。読み込みがタイムアウトした
-
HttpClientがGZIP形式でない場合の対処法
-
javax.net.ssl.SSLException: 読み取りエラー: ssl=0xdeae5100: システムコール中の I/O エラー、接続 res
-
maven プラグイン エラー プラグインの実行は、ライフサイクル構成ソリューションの対象外です。
-
[解決済み】JPA JoinColumnとmappedByの比較