2017-08-25 4 views
1

私たちのSpringブート(1.5.6)アプリケーションでは、エンティティに古典的な双方向OneToMany階層があります。 Orderは多くがItemです。 、データをフェッチするために、残り-コントローラを使用して、時にはOrder、時にはItemsがルートオブジェクトである私達のJavaScriptのビューでは、Springブート深度ベースのシリアル化

public class Order { 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id; 

    @OneToMany(mappedBy = "order",) 
    @JsonManagedReference 
    private Set<Item> items = new HashSet<>(); 
    // getters and setters 

} 

public class Item { 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id; 

    @ManyToOne 
    @JsonBackReference 
    private Order order = new HashSet<>(); 
    // getters and setters 

} 

。何か「Show Order」と別の「Show Item」ビューがあるとしましょう。

したがって、Orderがルートである場合、その子(アイテム)も知りたいです。Itemがルートである場合、親の順序も知りたいと考えています。

シリアル化は明らかに無限の再帰を生成するため、ここでは通常@JsonManagedReference@JsonBackReferenceを使用します。 しかし、これによりバックリファレンスが削除されます(ここでは、一方向のシリアル化が行われています...)。私たちはまた、012serを使用しようとしました - 弾性検索にはデシリアライズ中にいくつかの問題があり、また相互参照をいくつか持っています。最初のシリアライズされたオブジェクトは、そのitems -propertyは完全にシリアル化する必要がある、Orderとき

  • :、私たちのアイデアは「深・ブレイク」のsomekindを持つようになりました。しかし、それぞれItemの場合、orderへの逆参照はシリアル化されてはいけません(ここでは「深度は2です」と言うことができます)。
  • 最初のシリアライズされたオブジェクトがItemの場合、そのバックリファレンスorderはシリアル化されますが、アイテムに対する2番目のマネージ・リフレクションは無視されます。

これについてもJsonViewを試しましたが、この値を動的に設定することはできません。

私たちはこれを解決する方法を持っていますか?

答えて

0

代わりの@JsonManagedReference@JsonBackReferenceあなたは、ネストされたプロパティの直列抑制する@JsonIgnorePropertiesアノテーションを使用することができます

public class Item { 

    //... 

    @JsonIgnoreProperties("items") 
    @ManyToOne 
    private Order order = new HashSet<>(); 

    //... 
} 
+0

地獄ああ - 簡単なこと - これについて知らなかったが...ありがとう! – Indivon

関連する問題