【问题标题】:jax-b xml inverse reference with many to many relationship具有多对多关系的 jax-b xml 反向引用
【发布时间】:2013-06-04 23:55:07
【问题描述】:

我的数据模型中有几个多对多关系。我一直在尝试使用 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;
}

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

【问题讨论】:

    标签: java xml jpa jaxb java-ee-6


    【解决方案1】:

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

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

    @XmlInverseReference 有两个角色:

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

    【讨论】:

    • 感谢您的澄清。我一直在浏览您的博客条目,它们非常有帮助。最后一个问题,有没有一种方法可以指定关系,以便 MOXy 不会尝试从数据库加载关系,除非指定(即延迟加载)?我担心如果我试图编组一个具有许多双向关系的类,我的表现可能会受到影响。再次感谢您
    • @ReCoNciLiaTiOn - MOXy(或任何 JAXB 实现)将访问您映射的每个字段/属性。 JPA 实现通常使延迟加载成为get 方法的一部分。您可以通过使用@XmlAccessorType(XmlAccessType.FIELD) 映射到该字段来获得您正在寻找的行为(请参阅:blog.bdoughan.com/2011/06/using-jaxbs-xmlaccessortype-to.html)。
    • 好的,我会调查的。谢谢
    • XmlInverseReference 能否用于虚拟映射?正如eclipse.org/eclipselink/documentation/2.4/solutions/… 中指定的那样,似乎需要 FIELD 访问类型。 XMLInverseReferenceMapping 类似乎使用反射来查找成员字段。
    • @JakeB 你有没有设法阻止惰性关系被加载?我发布了一个问题here,因为我无法(轻松)实现这一目标。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-18
    • 1970-01-01
    • 2016-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多