要約:@JsonTypeInfo
も使用される多態型の双方向参照を処理する方法はありますか?多態型とJSONを使用して双方向参照を処理する方法は?
this page状態なしの下部にあるノートが、それは2010年に書かれたと私は多分何かが変更されたか、誰かが別のアプローチを提案することができます願っていますので、ジャクソンV1.6.0に適用しました。
背景: 私はジャクソンライブラリーとJPAを使用してJsonMappingException: Infinite recursion
、エラーを取得しています。私は@JsonIgnore
をsuggested hereと追加できますが、JPAエンティティがシリアル化/逆シリアル化されたときに双方向の関連付けが失われてしまうという欠点があります。
ジャクソンv1.6.0は、と@JsonBackReference
アノテーションを導入しました。これは素晴らしいようですが、2010年のdocumentationには、@JsonTypeInfo
を使用した多態性処理ではこれらの注釈が機能しないと具体的に述べられています。以下は
は私のエンティティクラスの不自然な例です:
@Entity
public class Owner implements Serializable {
@Id
@GeneratedValue
@Column(name="owner_id")
private Long id;
@OneToMany(mappedBy="pet", orphanRemoval=true, cascade=CascadeType.ALL)
private List<Pet> pets;
public List<Pet> getPets() {return pets;}
public void setPets(List<Pet> pets) {this.pets = pets;}
}
@Entity
@DiscriminatorColumn(name="pet_type")
@JsonTypeInfo(
use = JsonTypeInfo.Id.NAME,
include = JsonTypeInfo.As.PROPERTY,
property = "type")
@JsonSubTypes({
@Type(value = Dog.class, name = "dog"),
@Type(value = Cat.class, name = "cat"),
@Type(value = Bird.class, name = "bird") })
public class Pet implements Serializable {
@Id
@GeneratedValue
@Column(name="pet_id")
private Long id;
@ManyToOne
@JoinColumn(name="owner_id")
private Owner owner;
//@JsonIgnore
public Owner getOwner() {return owner;}
public void setOwner(Owner owner) {this.owner = owner;}
}
感謝の終了前に出て行くべきであるということです。確かめます – Justin