2013-06-08 2 views
4

У меня есть несколько очень многих отношений в моей модели данных. Я пытался использовать 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; 
} 

Любая помощь или руководство очень ценятся.

ответ

1

Примечание: Я - лидер EclipseLink JAXB (MOXy) и входит в группу экспертов JAXB (JSR-222).

@XmlInverseReference является EclipseLink JAXB (Moxy) расширение, которое позволяет отображать двунаправленные отношения:

@XmlInverseReference выполняет две роли:

  • Во время сортировка ts - бесконечный цикл. Если существует двунаправленная связь между и Bar, она будет маршала Foo, затем Bar, а затем она остановится, прежде чем пытаться маршал Foo.
  • Во время unmarshalling он будет заполнять задний указатель.
+0

Благодарим вас за разъяснение. Я просматривал записи в блоге, и они были очень полезны. Последний вопрос, есть ли способ указать отношения, чтобы MOXy не пытался загружать отношения из базы данных, если не указано, (например, ленивая загрузка)? У меня есть опасения, что мое исполнение может пострадать, если я пытаюсь маршалировать класс со многими двусторонними отношениями. Еще раз спасибо –

+0

@ReCoNciLiaTiOn - MOXy (или любая реализация JAXB) собирается получить доступ ко всем полям/свойствам, которые вы сопоставили. Реализации JPA обычно делают ленивую загрузку частью метода 'get'. Вы можете получить поведение, которое вы ищете, сопоставляя его с полем, используя '@XmlAccessorType (XmlAccessType.FIELD)' (см. Http://blog.bdoughan.com/2011/06/using-jaxbs-xmlaccessortype- to.html). –

+1

Хорошо, я посмотрю на это. Спасибо –

Смежные вопросы