@OneToMany

Die Annotation @OneToMany zeichnet Instanzvariable oder Accessormethoden aus, deren Typ eine Collection von Entities ist und deren Werte durch eine One to Many Assoziation gegeben sind.

Das Annotationselement mappedBy muss angegeben werden, wenn die Assoziation bidirektional ist. Bidirektional bedeutet in diesem Fall, dass das Entity auf der Many-Seite der Assoziation eine Instanzvariable mit einer Referenz auf ein Entity der One-Seite hat. Diese Instanzvariable ist mit der Annotation @ManyToOne versehen:

// Entität der One-Seite, Inverse Side
@Entity
public class A
{
  @OneToMany(mappedBy="a")
  public HashSet<B> bs;
}

// Entität der Many-Seite, Owning Side
@Entity
public class B
{
  @ManyToOne
  @JoinColumn(
    name="<Spaltenname>",
    referencedColumnName="<Spaltenname>",
    nullable=true|false,
    insertable=true|false,
    updatable=true|false,
    length=<int>
    )
  public A a;
}

Bei bidirektionalen One To Many Assoziationen ist die One-Seite der Assoziation die Inverse Side und die Many-Seite ist die Owning Side. Die Pflege der Assoziation erfolgt über die Many-Seite, d.h. es wird nicht die Collection verändert, sondern Entitäten der Many-Seite mit dem EntityManager angelegt (persist) oder gelöscht (remove). Der EntityManager hält die Collection auf der One-Seite nicht in einem dazu konsistenten Zustand. Wenn nötig, muss die Entität der One-Seite mit refresh aktualisiert werden. Gegebenenfalls muss für eine korrekte Aktualisierung der FetchType der Collection auf EAGER gesetzt werden.

Wenn die Assoziation nicht bidirektional ist (d.h. auf der Many-Seite der Assoziation gibt es keine Referenz zurück auf die One-Seite), dann können mit der Annotation @JoinTable die Details der in diesem Fall erforderlichen Zwischentabelle festgelegt werden.

@OneToMany(
targetEntity=<Class>,
cascade={CascadeType.ALL|CascadeType.PERSIST|CascadeType.MERGECascadeType.REMOVE|CascadeType.REFRESH},
fetch=FetchType.LAZY|FetchType.EAGER,
mappedBy="<Instanzvariablenname>")