Spring Framework v3.2.4 と JPA + Hibernate 4 を使用して RESTful サービスを実装しています。JSON 形式でリソースを返していますが (Jackson Mapper を使用)、次の例外に悩まされています。
Could not write JSON: failed to lazily initialize a collection of role: it.teck.service.model.Canvas.params, could not initialize proxy - no Session (through reference chain: it.teck.service.model.Canvas["params"]);
Canvas
とParam
エンティティの間に「多対多」の関係があり、キャンバスがサービスに要求されたときに params リストもシリアル化する必要があります。
私のクラスでは:
@Entity
public class Canvass {
@ManyToMany
@JoinTable(name = "canvas_params", joinColumns = { @JoinColumn(name = "id_canvas", referencedColumnName = "id_canvas") }, inverseJoinColumns = { @JoinColumn(name = "id_param", referencedColumnName = "id_param") })
private List<Param> params;
// ...
}
と:
@Entity
public class Param {
@ManyToMany(mappedBy = "params")
private List<Canvas> canvasList;
// ...
}
いくつかの投稿では、ManyToMany
フィールドをシリアライゼーションから除外し、シリアライゼーション ループを中断するというSO の回答が提案されていますが、キャンバス エンティティにリンクされたパラメーターをシリアライズする必要があります。それで、私は何をすべきですか?