私は4つのエンティティを持っています、
purchaseRequest - ファンディング - lineItemFunding purchaseRequest - lineItem - lineItemFunding - ファンディング
私はJAXBを使用@XmlTransient
しlineItemFunding
ており、ManyToOne
関係にあります。
purchaseRequest
-> -から来るときfunding
はスキャンしたくありませんが、 -> -> ->lineItemFunding
から来るときはスキャンします。のディープスキャンを実行したい。私が遭遇する問題は、 の内部で使用すると完全に機能しますが、削除すると次のエラーが発生することです。purchaseRequest
lineItem
lineItemFunding
Funding
Funding
@XmlTransient
getFunding()
lineItemFunding
Caused by: com.sun.istack.SAXException2:
A cycle is detected in the object graph.
This will cause infinitely deep XML:
org.company.com.entities.Funding@2a2
-> org.company.com.entities.LineItemFunding@82
-> org.company.com.entities.Funding@2a2
だから私の質問は、資金調達エンティティから lineItemFunding でディープスキャンを実行しようとするのをどのように防ぐことができるかということです. 以下は私のソースです。
購入依頼
@OneToMany(mappedBy = "purchaseRequest", cascade = CascadeType.ALL, orphanRemoval = true)
private List<LineItem> lineItems;
@OneToMany(mappedBy = "purchaseRequest", cascade = CascadeType.ALL, orphanRemoval = true)
private List<Funding> fundings;
資金調達
@OneToMany(mappedBy = "funding", cascade = CascadeType.ALL, orphanRemoval = true)
private List<LineItemFunding> lineItemFundings;
@XmlTransient
@ManyToOne
@JoinColumn(name = "purchase_request_id", nullable = false)
private PurchaseRequest purchaseRequest;
ラインアイテム
@OneToMany(mappedBy = "lineItem", cascade=CascadeType.ALL, orphanRemoval=true, fetch=FetchType.EAGER)
private List<LineItemFunding> lineItemFundings;
@XmlTransient
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name = "purchase_request_id", nullable = false)
private PurchaseRequest purchaseRequest;
LineItemFunding
@XmlTransient
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name = "line_item_id", nullable = true)
private LineItem lineItem;
// lineItem 方向から資金調達エンティティをディープ スキャンするために、この xmlTransient を削除する必要がありますが、資金調達方向には分割します。lineItemFunding は lineItem への資金調達の単なる結合であるため、資金調達は linItemFunding を詳細にスキャンする必要はありません。
@XmlTransient
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name = "funding_id", nullable = true)
private Funding funding;
ありがとう