2017-09-19 10 views
0

o-o!OneToManyをテーブル内にマッピングするにはどうすればいいですか?

WordPressデータベースからwp_postsテーブルをマップしようとしています。

@Entity 
@Table(name = "wp_posts") 
@Getter 
@Setter 
public class WPPosts { 

    @Id 
    @Column(name = "ID") 
    private long id; 

    @Column(name = "post_parent") 
    private long postParent; 

    @OneToMany(targetEntity = WPPosts.class, mappedBy = "postParent") 
    List<WPPosts> childPosts; 
} 

テーブルの一例(再び!:簡体字):次のようになります。

ID --- post_parentこれは実体である

:私は私の質問を簡素化するための情報を残しています
1 ----ヌル
2 ---- 1
3 ---- 1
4 ----ヌル

IDが1のエンティティは、サイズ2の子ページポスト(ポスト2と3を含む)を取得する必要があります。

残念ながら、これは機能しません。私は例外はありませんが、リストは空のままです。

+3

'mappedBy'は、idではなく、* entity *を参照することになっています。あなたのマッピングが機能するには '@ManyToOne WPPosts postParent'フィールドが必要です。また、このようなマッピングでは、 'WPPosts.postParent'は関係の所有側であり、' WPPosts.postParent'への変更だけがJPAによって承認されることになります。 'WPPosts.childPosts'への変更は無視されます。 – crizzis

+0

リストにアクセスする限り、トランザクションコンテキスト内のリストにアクセスするか、 '@ OneToMany'を' fetch = FetchType.EAGER'として宣言する必要があります。それ以外の場合は、遅延初期化の例外が発生します – crizzis

+0

あなたのコメントを回答として入力すると、私はそれを承認します。助けてくれてありがとう。 –

答えて

1

mappedByは、エンティティを指すものとし、idではありません。マッピングが機能するには、@ManyToOne WPPosts postParentフィールドが必要です。

このようなマッピングでは、WPPosts.postParentが関係の所有側であり、JPAによってWPPosts.postParentへの変更のみが適用されることに注意してください。 WPPosts.childPostsへの変更は無視されます。

リストにアクセスするには、トランザクションコンテキスト内のリストにアクセスするか、@OneToManyfetch=FetchType.EAGERと宣言する必要があります。そうしないと、初期化の遅延が発生します。

関連する問題