У меня есть несколько очень многих отношений в моей модели данных. Я пытался использовать JAX = B, чтобы получить XML-представление моделей данных, но я читал, что для одного до многих отношений Ньюй:jax-b xml обратная ссылка со многими для многих отношений
@XmlInverseReference
необходим для обратной стороны отображения. Я считаю, что это для использования разных типов выборки (например, LAZY и EAGER). Я точно не знаю, как работает эта аннотация. Использует ли он обратные указатели для обеспечения того, чтобы данные не извлекались, когда они заданы в определенных полях? Я также не знаю, нужно ли мне комментировать многие из многих отношений с вышеупомянутой аннотацией или нет.
Вот пользовательский класс, который имеет много-много отношений с самим собой, т.е. пользователь может дружить со многими другими пользователями. Должен ли я аннотировать геттер с помощью @XmlInverseReference?
@Entity
@Table(name = "users")
public class User implements Serializable {
...
// bi-directional many-to-many association to User
@ManyToMany(cascade = { CascadeType.PERSIST, CascadeType.MERGE,
CascadeType.REFRESH })
@JoinTable(name = "friends", joinColumns = { @JoinColumn(name = "uid") }, inverseJoinColumns = { @JoinColumn(name = "frienduId") })
private List<User> friends;
/**
* @return
*
* gets the list of users this user is friends with
*/
public List<User> getFriends() {
return this.friends;
}
/**
* @param friendsList
*
* sets the users friends list
*/
public void setFriends(List<User> friendsList) {
this.friends = friendsList;
}
Любая помощь или руководство очень ценятся.
Благодарим вас за разъяснение. Я просматривал записи в блоге, и они были очень полезны. Последний вопрос, есть ли способ указать отношения, чтобы MOXy не пытался загружать отношения из базы данных, если не указано, (например, ленивая загрузка)? У меня есть опасения, что мое исполнение может пострадать, если я пытаюсь маршалировать класс со многими двусторонними отношениями. Еще раз спасибо –
@ReCoNciLiaTiOn - MOXy (или любая реализация JAXB) собирается получить доступ ко всем полям/свойствам, которые вы сопоставили. Реализации JPA обычно делают ленивую загрузку частью метода 'get'. Вы можете получить поведение, которое вы ищете, сопоставляя его с полем, используя '@XmlAccessorType (XmlAccessType.FIELD)' (см. Http://blog.bdoughan.com/2011/06/using-jaxbs-xmlaccessortype- to.html). –
Хорошо, я посмотрю на это. Спасибо –