Примечание: Я EclipseLink JAXB (MOXy) и являюсь членом JAXB 2 (JSR-222 ) экспертная группа.
Да, вы можете отобразить сущности JPA в XML, и вот несколько способов, которыми EclipseLink JAXB (MOXy) делает это проще.
1. Двунаправленные сопоставления
Клиент
import javax.persistence.*;
@Entity
public class Customer {
@Id
private long id;
@OneToOne(mappedBy="customer", cascade={CascadeType.ALL})
private Address address;
}
Адрес
import javax.persistence.*;
import org.eclipse.persistence.oxm.annotations.*;
@Entity
public class Address implements Serializable {
@Id
private long id;
@OneToOne
@JoinColumn(name="ID")
@MapsId
@XmlInverseReference(mappedBy="address")
private Customer customer;
}
Для получения дополнительной информации
2. Сопоставление составных ключевых связей
Обычно мы думаем о отображении дерева объектов в XML, однако JAXB поддерживает использование комбинации @XmlID
/ @XmlIDREF
для сопоставления отношений между узлами, представляющими график. Стандартный механизм - это один ключ, один внешний ключ. JPA поддерживает концепцию составных ключей, как и MOXy, используя @XmlKey
и @XmlJoinNodes
(аналогично @XmlJoinColumns
в JPA).
Employee
@Entity
@IdClass(EmployeeId.class)
public class Employee {
@Id
@Column(name="E_ID")
@XmlID
private BigDecimal eId;
@Id
@XmlKey
private String country;
@OneToMany(mappedBy="contact")
@XmlInverseReference(mappedBy="contact")
private List<PhoneNumber> contactNumber;
}
PhoneNumber
@Entity
public class PhoneNumber {
@ManyToOne
@JoinColumns({
@JoinColumn(name="E_ID", referencedColumnName = "E_ID"),
@JoinColumn(name="E_COUNTRY", referencedColumnName = "COUNTRY")
})
@XmlJoinNodes( {
@XmlJoinNode(xmlPath="contact/id/text()", referencedXmlPath="id/text()"),
@XmlJoinNode(xmlPath="contact/country/text()", referencedXmlPath="country/text()")
})
private Employee contact;
}
Для получения дополнительной информации
3. MOXy допускает использование составных и встроенных ключей
JPA также может использовать встроенные классы ключей для представления составных ключей. MOXy также поддерживает этот стиль составных ключей.
Для получения дополнительной информации
4. EclipseLink JAXB (MOXy) и EclipseLink JPA имеют общие концепции
EclipseLink предоставляет реализации JAXB и JPA, которые имеют общее ядро. Это означает, что они имеют много общих понятий, таких как:
Методы виртуального доступа
EclipseLink поддерживает концепцию виртуальных свойств. Это полезно при создании мультитенантного приложения, в котором вы хотите индивидуальные настройки. Эта концепция поддерживается в реализациях EclipseLink JPA и JAXB.