JAXB映射到XML的循环引用?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (27)

我有一个包含循环的对象图。我如何让JAXB处理这个问题?我试着用@XmlTransient子类中的注释,但JAXB封送处理程序仍然检测循环。

@Entity
@XmlRootElement
public class Contact {

    @Id
    private Long contactId;

    @OneToMany(mappedBy = "contact")
    private List<ContactAddress> addresses;

...

}

@Entity
@XmlRootElement
public class ContactAddress {

    @Id
    private Long contactAddressId;

    @ManyToOne
    @JoinColumn(name = "contact_id")
    private Contact contact;

    private String address;

...

}
提问于
用户回答回答于
@Entity 
@XmlRootElement 
public class Contact { 

    @Id 
    private Long contactId; 

    @OneToMany(mappedBy = "contact") 
    private List<ContactAddress> addresses; 

... 

} 

@Entity 
@XmlRootElement 
public class ContactAddress { 

    @Id 
    private Long contactAddressId; 

    @ManyToOne 
    @JoinColumn(name = "contact_id") 
    @XmlInverseReference(mappedBy="addresses")
    private Contact contact; 

    private String address; 

... 

} 

还有其他扩展,包括对组合键和嵌入式密钥类的支持。

要指定EcliseLink Moxy JAXB实现,您需要在模型类(即合同)中包含一个jaxb.properties文件,其中包含以下条目:

javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory
用户回答回答于

可以:

  • 将组成循环的引用属性之一标记为@Xml。
  • 使用@XmlID和@XmlIDREF,这样引用就可以使用XML ID来表示,而不是由包含来表示。
  • 使用CycleRecoverable接口以编程方式处理周期。

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励