我的数据模型中有几个多对多关系。我一直在尝试使用 JAX=B 来获取数据模型的 XML 表示,但是我已经阅读了一对多关系的内容:
@XmlInverseReference
是映射的反面所必需的。我相信这是为了使用不同的获取类型(即 LAZY 和 EAGER)。我不确定这个注释究竟是如何工作的。它是否使用反向指针来确保在某些字段上指定数据时不获取数据?我也不知道我是否需要用上面的注释来注释我的多对多关系。
这是与自身具有多对多关系的用户类,即。一个用户可以与许多其他用户成为 friend 。我应该用 @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;
}
非常感谢任何帮助或指导。
最佳答案
注意:我是 EclipseLink JAXB (MOXy) JAXB (JSR-222) 的领导和成员专家组。
@XmlInverseReference
是一个 EclipseLink JAXB (MOXy) 扩展,可让您映射双向关系:
- http://blog.bdoughan.com/2010/07/jpa-entities-to-xml-bidirectional.html
- http://blog.bdoughan.com/2013/03/moxys-xmlinversereference-is-now-truly.html
@XmlInverseReference
有两个作用:
- 在编码期间,它可以防止出现无限循环。如果
Foo
和Bar
之间存在双向关系,它将编码Foo
然后Bar
然后它会在之前停止尝试再次编码Foo
。 - 在解码期间,它将填充后向指针。
关于java - 具有多对多关系的 jax-b xml 反向引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17005039/