java异常循环里还是在,java – SAXException2:在对象图中检测到循环.怎么回事?

我有一个Web服务,其中包含基于我拥有的数据库模式使用NetBeans生成的

Java类文件.

我有时会遇到奇怪的例外,其中一个就是这个:

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 ]]

我用google搜索了这个异常并找到了一些类似的情况,但我仍然无法理解这个问题.我刚刚使用NetBeans生成了这些类(Person.java,Team.java,TeamPerson.java),那么问题是如何发生的呢?

当我试图让所有人:

Iterator iter = team.getTeamPersonCollection().iterator();

while(iter.hasNext()) {

Person person = ((TeamPerson)iter.next()).getPerson();

...

}

编辑

如果我从TeamPerson中删除Team引用,则会收到以下错误:

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 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 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",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;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值