java - 具有多对多关系的 jax-b xml 反向引用

标签 java xml jpa jaxb java-ee-6

我的数据模型中有几个多对多关系。我一直在尝试使用 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) 扩展,可让您映射双向关系:

@XmlInverseReference 有两个作用:

  • 在编码期间,它可以防止出现无限循环。如果 FooBar 之间存在双向关系,它将编码 Foo 然后 Bar 然后它会在之前停止尝试再次编码 Foo
  • 在解码期间,它将填充后向指针。

关于java - 具有多对多关系的 jax-b xml 反向引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17005039/

相关文章:

java - 在 JPA-/CrudRepository 中的自定义 @Query 中使用 SQL-IN 子句并将列表或设置为传递参数?

java - 我在理解面向对象 - java 时遇到问题

java - 如何在 Manjaro 中通过命令行更改 java 的默认版本?

javascript - 你如何在 node.js 中获取和解析 xml?

xml - 如何使用 vbscript 删除 XML 文件中的节点?

java - 数据库已更新,但选择查询在 hibernate 中未给出结果

java - 我可以在 JPA 中创建此查询而不使用 native 查询吗?

spring-boot - hashCode 或 equals 中的 HibernateException

java - 无法渲染jsp页面

java - 安卓 : LinearLayout with weight inside a ScrollView