2017-03-15 16 views
0

自分自身への参照を持つFooクラスがあります。私はJSON応答発生器にFooのオブジェクトを渡した場合自己参照でエンティティのRESTfulな応答を処理する方法

@Entity 
public class Foo() { 
    @Column(name = "id", unique = true, nullable = false) 
    private Long id; 

    @JsonIgnore 
    @ManyToOne(fetch = FetchType.LAZY) 
    @JoinColumn(name = "id_Foo") 
    private Foo parent; 
} 

、必要なすべてのゲッターが開始され、すべての必要なデータは、JPAによってDBから取得します。

今の問題は、私が欲しいもの、私は自己参照フィールドから@JsonIgnoreを削除する場合、私は親の情報、および親の親の情報を取得し、などだということ

である私が取得した親情報の深い制限する可能性があることです。例えば.:について

  • ディープ0 - 私はFooのデータを取得する
  • ディープ1 - Iは、fooとFooの親のデータを取得する
  • ディープ2 - 私はfooとFooの親のデータを取得しますFoo親親 など

私は何も見つかりませんでしたので、おそらくアノテーションやスムーズを持つ単純なソリューションがあります。

答えて

0

Fooプロパティとそのparentをすべて収集するカスタムDTOオブジェクトを作成するのが最善の方法だと思うので、再帰関係を取得せず、遅延読み込み例外を回避できます。そして、あなたはあなたの要求でJSONの結果を保存するために、このDTOを使用することができます

public class FooDto() { 

    private Long id; 
    private Foo parent; 

    //getters and setters here 
} 

だから、あなたはそれがあるとして、あなたのエンティティを維持します:

@Entity 
public class Foo() { 
    @Column(name = "id", unique = true, nullable = false) 
    private Long id; 

    @JsonIgnore 
    @ManyToOne(fetch = FetchType.LAZY) 
    @JoinColumn(name = "id_Foo") 
    private Foo parent; 
} 

そして、このようなカスタムDTOオブジェクトを作成します。

詳細はWhat is the point of using DTO (Data Transfer Objects)?をご覧ください。

@JsonIgnoreドキュメント:

ジャクソンによれば@JsonIgnore documentationこの注釈がアクティブである場合、または定義する唯一の可能性valueありますように、注釈のための深さ/レベルを指定するようなオプション(プロパティ)がありませんない。

+0

私はそれに似たものを考えていましたが、よりシンプルに(すでに実装されていて使いやすい)方法はありますが、私は考えていました。あなたの答えをありがとう、私はそれが本当にあるので、私の質問に解決策としてマークします。 – Karolis

+0

あなたは歓迎です。はい、私が知っている限り、注釈を使用するソリューションはありませんので、これが最良の方法です。 –

+0

@Karolisこの作品をどうやって作ったのですか?私は私の春のブートアプリケーションと同様の問題があります。手伝ってくれる? – Yash

関連する問題