Преимущество использования JAXB состоит в том, что это стандартная среда выполнения с несколькими реализациями (точно так же, как JPA).
Если вы используете EclipseLink JAXB (MOXy), у вас будет много расширений для обработки сущностей JPA, включая двунаправленные отношения. Это делается с помощью аннотации MOXy @XmlInverseReference. Он действует аналогично @XmlTransient на маршале и заполняет отношение цели к источнику на маршале.
http://wiki.eclipse.org/EclipseLink/Examples/MOXy/JPA/Relationships
@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