ホームページ >Java >&#&チュートリアル >アノテーションを使用して Hibernate 4 と Spring のエンティティ間の関係をどのように定義しますか?
一方向のリレーションシップを作成するには-to-one 関係の場合は、所有クラスで @OneToOne アノテーションを使用します。 @JoinColumn アノテーションを構成して、依存クラスのテーブル内の外部キーを保持する列の名前を指定します。
例:
<code class="java">public class Foo { private Long fooId; @OneToOne private Bar bar; } public class Bar { private Long barId; // No corresponding mapping to Foo.class }</code>
双方向の 1 対 1 の関係の場合、両方のクラスに @OneToOne アノテーションを付けます。所有クラスで @JoinColumn アノテーションを使用して、外部キー列名を指定します。依存クラスで、@JoinColumn アノテーションを使用して、外部キーを所有クラスにマップし直します。
例:
<code class="java">public class Foo { private Long fooId; @OneToOne(cascade = CascadeType.ALL) @JoinColumn(name = "barId") private Bar bar; } public class Bar { private Long barId; @OneToOne(mappedBy = "bar") private Foo foo; }</code>
ユーザー管理の結合テーブルを使用した一方向の 1 対多の関係の場合、2 つのクラス間の関係をマップする結合テーブル クラスを作成します。結合テーブルに @Entity と @Table の注釈を付け、列を親クラスと子クラスの主キーにマップします。
例:
<code class="java">public class Foo { private Long fooId; @OneToMany @JoinTable(name="FOO_BAR", joinColumns = @JoinColumn(name="fooId"), inverseJoinColumns = @JoinColumn(name="barId")) private List<Bar> bars; } public class Bar { private Long barId; // No mapping specified here. } @Entity @Table(name="FOO_BAR") public class FooBar { private UUID fooBarId; @ManyToOne @JoinColumn(name = "fooId") private Foo foo; @ManyToOne @JoinColumn(name = "barId") private Bar bar; // You can store other objects/fields on this table here. }</code>
外部キー マッピングを使用した双方向の 1 対多の関係の場合、所有クラスに @OneToMany のアノテーションを付け、依存クラスに @ManyToOne のアノテーションを付けます。 @JoinColumn アノテーションを使用して、依存クラス テーブル内の外部キーを保持する列名を指定します。
例:
<code class="java">public class Foo { private Long fooId; @OneToMany(mappedBy = "bar") private List<Bar> bars; } public class Bar { private Long barId; @ManyToOne @JoinColumn(name = "fooId") private Foo foo; }</code>
Hibernate 管理の結合テーブルを使用した双方向の多対多の関係の場合、各クラスに @OneToMany アノテーションを付けます。 2 つのクラス間の関係をマップする結合テーブル クラスを作成します。結合テーブルに @Entity と @Table の注釈を付け、列を親クラスと子クラスの主キーにマップします。
例:
<code class="java">public class Foo { private Long fooId; @OneToMany @JoinTable(name="FOO_BAR", joinColumns = @JoinColumn(name="fooId"), inverseJoinColumns = @JoinColumn(name="barId")) private List<Bar> bars; } public class Bar { private Long barId; @OneToMany @JoinTable(name="FOO_BAR", joinColumns = @JoinColumn(name="barId"), inverseJoinColumns = @JoinColumn(name="fooId")) private List<Foo> foos; }</code>
ユーザー管理の結合テーブル オブジェクトを使用した双方向の多対多の関係の場合、2 つのクラス間の関係をマップする結合テーブル クラスを作成します。結合テーブルに @Entity および @Table の注釈を付け、列を親クラスと子クラスの主キーにマップします。各クラスに @OneToMany アノテーションを付け、フィールドを結合テーブル クラスにマップします。
例:
<code class="java">public class Foo { private Long fooId; @OneToMany(mappedBy = "bar") private List<FooBar> bars; } public class Bar { private Long barId; @OneToMany(mappedBy = "foo") private List<FooBar> foos; } @Entity @Table(name="FOO_BAR") public class FooBar { private UUID fooBarId; @ManyToOne @JoinColumn(name = "fooId") private Foo foo; @ManyToOne @JoinColumn(name = "barId") private Bar bar; // You can store other objects/fields on this table here. }</code>
Hibernate は、どちらかまたは両方の方法で操作をカスケードできます。双方向の関係にあります。所有クラスに @OneToMany アノテーションをマークすることで、希望の方向に変更をカスケードします。一般に、関係の所有者側でカスケードをマークすることをお勧めします。
孤立したオブジェクトを削除すると、親オブジェクトに関連付けられなくなった孤立したオブジェクトがデータベースから自動的に削除されます。 @OneToMany アノテーションで orphanRemoval = true を設定することで、孤立の削除を有効にします。
LazyInitializationException は、遅延フェッチされたコレクションを含むエンティティが、コレクションが初期化される前にアクセスされると発生します。解決するには、Hibernate.initialize() を使用してコレクションを明示的に初期化するか、@OneToMany アノテーションで fetchType = FetchMode.EAGER を使用してコレクションを積極的にロードします。
以上がアノテーションを使用して Hibernate 4 と Spring のエンティティ間の関係をどのように定義しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。