私はモデルカテゴリを持っています。親カテゴリーとサブカテゴリーのリストを持つことがあります。私は、エンティティが自分自身に関係するケースを見つけることができなかったので、この質問を書いた。FetchType.Lazyが動作しないのはなぜですか?
parent {
id
parent: null
childs {
child {
id
parent: ...lazy loading exception...
childs: null
}
}
}
しかし、上の子モデルで:私はのようなものを見ることが予想
Category parent = new Category();
parent.setName("parent");
Category child1 = new Category();
child1.setName("child1");
child1.setParent(parent);
parent.getSubcategories().add(child1);
categoryPersistence.save(parent);
:
@Entity
public class Category {
@Id
private String id;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "parent_id")
private Category parent;
@OneToMany(mappedBy = "parent", fetch = FetchType.EAGER, cascade = CascadeType.PERSIST)
private List<Category> subcategories = Lists.newArrayList();
}
私のようなエンティティを保存します。
は、私はこのようにそれを実装しようとしました私は再帰的ループを持っています。 それを防ぐには?ええ、私も@JsonIgnoreを使用しました。しかし、私はそれが良い習慣であるかどうかは分かりませんでした しかし、私は1つのカテゴリが必要な場合があり、私は本当に親とUIにそれを送信する必要があります。 @JsonIgnoreはこれを作成できますか?
実際のオブジェクトを取得するメソッドでは、パラメータで 'referenced'というブール値を持つことができます。ブール値は、オブジェクトが自己を呼び出すとtrueに設定されます。そして、構築中に、 'if(!referenced){...'}をチェックして、再帰的ループを回避して参照を1回だけ得ることができます。 – ghoulfolk