मेरे पास जावा क्लास फाइलों के साथ एक वेब-सेवा है जो नेटबीन के साथ जेनरेट की गई है जो मेरे पास डेटाबेस स्कीमा के आधार पर है।SAXException2: ऑब्जेक्ट ग्राफ़ में एक चक्र का पता लगाया गया है। मामला क्या है?
मैं अजीब अपवाद कभी कभी मिलता है और उनमें से एक यह एक है:
javax.xml.ws.WebServiceException: javax.xml.bind.MarshalException
- with linked exception:
[com.sun.istack.internal.SAXException2: A cycle is detected in the object graph. This will cause infinitely deep XML: org.mylib.Person[ personId=1 ] ->org.mylib.TeamPerson[ teamPersonPK=org.mylib.teamPersonPK[ teamId=1, personId=1 ] ] -> org.mylib.Person[ personId=1 ]]
मैं इस अपवाद googled और कुछ simillar मामलों में पाया गया लेकिन मैं अभी भी समस्या नहीं समझ सकता है। मैंने नेटबीन के साथ उन वर्गों (Person.java, Team.java, TeamPerson.java) को अभी जेनरेट किया है, तो समस्या कैसे हो सकती है?
यह तब होता है जब मैं सभी व्यक्तियों प्राप्त करने की कोशिश: यदि मैं टीम संदर्भ TeamPerson से मैं निम्नलिखित त्रुटि मिलती है हटाने
Iterator iter = team.getTeamPersonCollection().iterator();
while(iter.hasNext()) {
Person person = ((TeamPerson)iter.next()).getPerson();
...
}
संपादित
:
Internal Exception: Exception [EclipseLink-7154] (Eclipse Persistence Services - 2.2.0.v20110202-r8913): org.eclipse.persistence.exceptions.ValidationException
Exception Description: The attribute [teamPersonCollection] in entity class [class org.mylib.Team] has a mappedBy value of [team] which does not exist in its owning entity class [org.mylib.TeamPerson]. If the owning entity class is a @MappedSuperclass, this is invalid, and your attribute should reference the correct subclass.
at org.eclipse.persistence.exceptions.PersistenceUnitLoadingException.exceptionSearchingForPersistenceResources(PersistenceUnitLoadingException.java:126)
संपादित करें 2
जेनरेट किए गए वर्गों के भाग इस तरह दिखते हैं:
Team.java
public class Team implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Basic(optional = false)
@Column(name = "team_id")
private Integer teamId;
@Column(name = "type")
private String type;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "team")
private Collection<TeamPerson> teamPersonCollection;
Person.java
public class Person implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Basic(optional = false)
@Column(name = "person_id")
private Integer personId;
@Column(name = "name")
private String name;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "person")
private Collection<TeamPerson> teamPersonCollection;
TeamPerson.java
public class TeamPerson implements Serializable {
private static final long serialVersionUID = 1L;
@EmbeddedId
protected TeamPersonPK teamPersonPK;
@Basic(optional = false)
@Column(name = "timestamp")
@Temporal(TemporalType.TIMESTAMP)
private Date timestamp;
@JoinColumn(name = "team_id", referencedColumnName = "team_id", insertable = false, updatable = false)
@ManyToOne(optional = false)
private Team team;
@JoinColumn(name = "person_id", referencedColumnName = "person_id", insertable = false, updatable = false)
@ManyToOne(optional = false)
private Person person;
TeamPersonPK.java
@Embeddable
public class TeamPersonPK implements Serializable {
@Basic(optional = false)
@Column(name = "team_id")
private int teamId;
@Basic(optional = false)
@Column(name = "person_id")
private int personId;
हाय @ रोक्स, क्या आपने अंत में इस समस्या को हल किया? मुझे वही मिला! – LppEdd