4

データ モデルに多対多のリレーションシップがいくつかあります。私は JAX=B を使用してデータ モデルの XML 表現を取得しようとしましたが、1 対多の関係については次のように読みました。

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

どんな助けや指導も大歓迎です。

4

1 に答える 1

2

注: 私はEclipseLink JAXB (MOXy)のリーダーであり、JAXB (JSR-222)エキスパート グループのメンバーです。

@XmlInverseReference双方向の関係をマップできるEclipseLink JAXB (MOXy)拡張機能です。

@XmlInverseReference次の 2 つの役割を果たします。

  • マーシャリング中に無限ループが発生するのを防ぎます。Fooとの間に双方向の関係が存在する場合は、Barマーシャリングが行われ、Foo再度Barマーシャリングを試みる前に停止Fooします。
  • アンマーシャリング中に、バック ポインターが設定されます。
于 2013-06-10T19:14:12.563 に答える