2017-11-23 7 views
1

ユーザーのストアを参照する外部キーストアを持つテーブルユーザーがあります。スプリング外部キー無限ループ

第2に、私は外来のキーを持つテーブルストアがあります。これは実際にはユーザーIDです。

私のSpringアプリケーションでは、私はマッピングオブジェクトの関係を作成しました。私は、ユーザクラスにストアとストアクラスにユーザ用に@ManyTOoneのクラスモデルを作成します。

私はリポジトリとREstControllerを作成します。

私はUserRepositoryでfindOneメソッドを試してみましたが、ユーザーのストア、ストアのユーザー、ストアのユーザーなどがロードされているので、無限ループがあります。

そのような状況を回避するためのベストプラクティスは何ですか。あなたが直接それをレンダリングする場合

おかげ

+0

このような循環依存性は、無限ループを引き起こしません。コードを表示する。 – Kayaman

+0

問題を解決できましたか? –

答えて

1

は、あなたのOneToMany宣言

で例えば注釈

@JsonManagedReferenceで管理リファレンスに1つのリレーションを設定する必要が

@ManyToOne宣言の@JsonBackReferenceアノテーション。

これをしないと、この無限ループに入ります。

は他の可能性があまりにもこれを見てあります

http://www.baeldung.com/jackson-bidirectional-relationships-and-infinite-recursion

私は、これはあなたを助けることを願っています。

1

fetch typeの属性:@ManyToOne(fetch = FetchType.LAZY)をご覧ください。どちらのエンティティにも@ManyToOne@OneToManyの注釈がある場合、それらのうちの1人は、無限ループを避けるために遅延フェッチタイプを使用する必要があります。例:

@Entity(name = "ATTRIBUTE") 
public class Attribute { 
    ... 
    @ManyToOne(fetch = FetchType.LAZY) 
    @JoinColumn(name = "CONFIG_ID") 
    private Config config; 
    ... 
} 

@Entity(name = "CONFIG") 
public class Config { 
    ... 
    @OneToMany(mappedBy = "config", fetch = FetchType.EAGER) 
    private Set<Attribute> attributes; 
    ... 
} 

デフォルトのフェッチタイプはeagerです。

+0

これは、エンティティが関連する子オブジェクトを配信しないことになります...これは彼がしたいことではありません。あなたのソリューションでは、リポジトリを2回呼び出す必要があります。最初のコンフィグレーションと属性の両方のデリバリを実現するための2回目です。 – Gulliva

+0

はい、それは本当ですが、属性エンティティの場合のみ:コンフィグレーションを明示的にロードする必要があります。しかし、Configエンティティはすべての関連する属性を熱心に読み込みます。 –

+0

申し訳ありませんがそれを逃した、あなたは正しいです。しかし、可能な双方向ロードはありません... – Gulliva