Play Framework 2.4で関連したモデルをJsonにするとこでハマったのでメモ
発生した問題
OneToMany
のモデルをtoJson()
したらthrough reference chain
というエラー。
参照のループになってしまうみたい。
対応方法
Json.toJson()
を使う場合は以下のアノテーションが必要。
項目等を無視させたい場合
サンプル(Userが複数のMemoを持ってるとする)
HogeController.java
public Result test() {
return ok(Json.toJson(User.find.byId(1L)));
}
User.java
@Entity @Table(name = "users")
public class User extends Model {
@Id
public Long id;
public String name;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "user")
@JsonManagedReference
public List<Memo> memos;
public static final Find<Long, User> find = new Find<Long, User>(){};
}
Memo.java
@Entity @Table(name = "memos")
public class Memo extends Model {
@Id
public Long id;
public String name;
public String memo;
@ManyToOne
@JoinColumn(name = "user_id")
@JsonBackReference
public User user;
}