4

我遇到了以下 ORM 问题:

我有两个 A 类和 B 类,它们都有一组 C 类:

class A {
  @Id
  @GeneratedValue
  private long id;

  @OneToMany
  private Set<C> cSet;
}

class B {
  @Id
  @GeneratedValue
  private long id;

  @OneToMany
  private Set<C> cSet;
}

class C {
  @Id
  @GeneratedValue
  private long id;
}

我的一个想法是为 C 使用 MappedSuperclass,并有两个扩展类,每个类都在 A 或 B 中引用。但从面向对象的角度来看,这不是最好的方法,尽管我可以使用超类类型来工作跟他们。

有没有更好的方法来实现这个模型?

谢谢,本杰明

4

1 回答 1

8

如果您不指定任何映射注释(即 JoinColumn 或 JoinTable),它将为每个关联使用一个连接表。

因此,您将拥有以下表格:

A : id
B : id
C : id
A_C : a_id, c_id (where c_id is unique)
B_C : a_id, c_id (where c_id is unique)

如果使用 JoinColumn 注释来注释每个集合的替代方法:

class A {
    @OneToMany
    @JoinColumn(name = "a_id")
    private Set<C> cSet;
}

class B {
   @OneToMany
   @JoinColumn(name = "b_id")
   private Set<C> cSet;
}

因此,您将拥有以下表格:

A : id
B : id
C : id, a_id, b_id

这当然在文档中有所描述。

于 2012-12-18T18:27:07.043 回答