私たちの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を試しましたが、この値を動的に設定することはできません。
私たちはこれを解決する方法を持っていますか?
地獄ああ - 簡単なこと - これについて知らなかったが...ありがとう! – Indivon