以下にいくつかのドメインを作成しました。JPAでの無限再帰参照OneToMany、ManyToOne関係
@Entity
public class Conference {
...
@OneToMany(
targetEntity = ProgramDate.class,
mappedBy = "conference",
cascade = CascadeType.REMOVE,
fetch = FetchType.EAGER
)
@JsonBackReference
private List<ProgramDate> programDateList;
}
@Entity
public class Program {
...
@ManyToOne
@JoinColumn(name = "program_date_id")
@JsonBackReference
private ProgramDate date;
@ManyToOne
@JoinColumn(name = "room_id")
private Room room;
...
}
@Entity
public class ProgramDate {
...
@OneToMany(
targetEntity = Program.class,
mappedBy = "date",
fetch = FetchType.EAGER
)
@JsonBackReference
private List<Program> programList;
@ManyToOne
@JoinColumn(name = "conference_id")
private Conference conference;
}
@Entity
public class Room {
...
@OneToMany(
targetEntity = Program.class,
mappedBy = "room",
fetch = FetchType.EAGER
)
@JsonBackReference
private List<Program> programList;
}
私は以下のコードのようにフリーメーカを作った。
<#list conference.programDateList as date>
...
</#list>
私は、JPA OneToMany、ManyToOne関係での無限再帰参照である問題を抱えています。 @JsonBackReference
を追加しようとしましたが、jsonの再帰的な問題についてのみ解決しました。
JPAの無限再帰問題はどこにありますか? JPAはオブジェクトアイデンティティを持っているため、双方向関係で複数のエンティティを処理することはなく、単一のルートエンティティだけを読み込もうとすると巨大なオブジェクトグラフを取り込むのを軽減するための遅延フェッチが可能です。あなたの問題はオブジェクトモデルのシリアライズであると仮定し、JsonBackReferenceアノテーションを使用している場合は、このシリアライズによって問題が発生します。 JsonManagedReferenceとJsonBackReferenceを使用していることを示すhttp://www.baeldung.com/jackson-bidirectional-relationships-and-infinite-recursionを参照してください。 – Chris
@Chris上記のような会議でループプログラムの日付を使用すると発生します。日は再帰的です。私はJsonManagedReferenceとJsonBackReferenceを使用しようとしますが、上記のような再帰問題があります。 – egaoneko
また、その再帰はJPAとは関係がないようであり、JsonBackReferenceはJPAアノテーションではありません。あなたのJsonBackReferenceアノテーションは、Json再帰問題をどのように解決しましたか?問題は何ですか?データを読むとき、この問題はどこに現れますか?シリアル化する前にデータをチェックしてください。モデルのJPAとの相互作用に問題があり、シリアル化以外の遅延関係が発生することは本当に疑問です。 – Chris