Hibernate (JPA) mehrere @OneToMany für das gleiche Modell

Habe ich zwei Modelle.

@Entity
public class Student
{
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    protected long id;

    @?
    protected Address homeAddress;

    @?
    protected Address schoolAddress;
}

@Entity
public class Address
{
   @Id
   @GeneratedValue(strategy=GenerationType.AUTO)
   protected long id;

   @?
   protected List<Student> students;
}

Was JPA/hibernate annotations brauche ich um über homeAddress, schoolAddress und students um die Vereinsarbeit?

Natürlich habe ich vieles ausprobiert und nichts hat funktioniert.
Zum Beispiel, Einstellung

    @ManyToOne
    @JoinColumn (name="student_homeAddress_id", updatable = false, insertable = false)
    protected Address homeAddress;

    @ManyToOne
    @JoinColumn (name="student_schoolAddress_id", updatable = false, insertable = false)
    protected Address schoolAddress;

und

    @OneToMany(cascade={CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH}, fetch = FetchType.EAGER)
    @JoinColumns({
    @JoinColumn(name = "student_homeAddress_id", referencedColumnName = "student_homeAddress_id"),
    @JoinColumn(name = "student_schoolAddress_id", referencedColumnName = "student_schoolAddress_id")})
    @IndexColumn(name="students_index")
    protected List<Student> students;

yealds Unable to find column with logical name: student_homeAddress_id in org.hibernate.mapping.Table(Address) and its related supertables and secondary tables.
Habe auch versucht mit mappedBy aber das nimmt ein einzelnes argument (kann nicht mappedBy="student_homeAddress_id, student_schoolAddress_id".

Schaute auch in das verschieben der JoinColumns zu den Student tablet, aber ich bin nicht sicher, was die Anmerkungen, die Aussehen sollte wie für OneToMany ManyToOne und da habe ich mehrere Adressen gibt, die JoinColumns macht nicht viel Sinn.

Der Sache, hat funktioniert, war aber nicht die Schaffung der Verbände war:

    @OneToMany(cascade={CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH}, fetch = FetchType.EAGER)
    @JoinColumn(name="address_id")
    @IndexColumn(name="students_index")
    protected List<Student> students;

Verwenden diese beim speichern in die DB die Modelle, die student_homeAddress_id und student_schoolAddress_id waren immer null, auch nach Lagerung der beiden enden (der Student und Adresse Modell).

Mein Gedanke ist, dass auf der Address Tabelle es werden 3 zusätzliche Spalten: student_homeAddress_id (die id des Studenten in der Student-Tabelle für die homeAddress), student_schoolAddress_id (die id des Studenten in der Student-Tabelle für die schoolAddress) und students_index (die 0-basierte Position auf der students Liste). Das sollte ausreichen, richtig?

Irgendwelche Ideen?

Vielen Dank!

InformationsquelleAutor iliask | 2012-10-12

Schreibe einen Kommentar