4

我的数据模型中有几个多对多的关系。我一直在尝试使用 JAX=B 来获取数据模型的 XML 表示,但是我已经阅读了一对多的关系:

@XmlInverseReference

映射的反面需要。我相信这是为了使用不同的获取类型(即 LAZY 和 EAGER)。我不确定这个注释到底是如何工作的。它是否使用反向指针来确保在某些字段上指定数据时不获取数据?我也不知道我是否需要用上面的注释来注释我的多对多关系。

这是与自身具有多对多关系的用户类,即。一个用户可以与许多其他用户成为朋友。我应该用@XmlInverseReference 注释getter 吗?

@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;
}

非常感谢任何帮助或指导。

4

1 回答 1

2

注意: 我是EclipseLink JAXB (MOXy)负责人,也是JAXB (JSR-222)专家组的成员。

@XmlInverseReference是一个 EclipseLink JAXB (MOXy) 扩展,使您能够映射双向关系:

@XmlInverseReference有两个作用:

  • 在编组期间,它可以防止发生无限循环。Foo如果和之间存在双向关系Bar,它将在那时编组,Foo然后在再次Bar尝试编组之前停止Foo
  • 在解组期间,它将填充反向指针。
于 2013-06-10T19:14:12.563 回答