テーブル Document と DocumentField の間にリレーショナル データベース ロジックを持つソリューションを実装しようとしています。このソリューションは Web サービスとして使用され、クライアントによって使用されます。Web サービス クライアントから次の例外が発生しました。
Exception: javax.xml.ws.WebServiceException: javax.xml.bind.MarshalException
- with linked exception:
[com.sun.istack.SAXException2: A cycle is detected in the object graph. This will cause infinitely deep XML: com.bla.bla.ws.Document@115cfb9 -> com.bla.bla.ws.DocField@94e6ee -> com.bla.bla.ws.Document@115cfb9]
この問題を解決するために、@XmlTransient アノテーションを追加しました。
書類:
@Entity(name = "Document")
@Table(name = "DOCUMENT", schema = "DOCUMENT")
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Document extends BasicObject implements Serializable {
private static final long serialVersionUID = -5274375009324738532L;
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy="doc")
@XmlTransient
private List<DocField> extraInfo;
DocField:
public class DocField extends BasicObject implements Serializable {
private static final long serialVersionUID = -7403660716697161123L;
@ManyToOne
@JoinColumn(name="DOC_ID")
@XmlTransient
private Document doc;
しかし、次のコード スニペットでは、クライアントから docField にアクセスできません。
Document testDoc = new Document ();
DocField testDocField = new DocField();
testDoc.getDocField.add(testDocField);
この種のソリューションでは、いくつかの点を誤解していると思います。誰でもこれについて説明できますか?または任意の外部リソース?