Hi,
danke für deine Antwort.
Habe mich wohl ein bisschen falsch ausgedrückt. Meine oben beschriebenen Tabellen sind nur ein einfaches Beispiel. In Tabelle A und B exisitieren noch einige weitere Spalten, die die Datenmenge sehr schnell wächsen lässt.
Ich bekomme ein Objekt mit den Daten für Tabelle A und Tabelle B. Wegen Redundanz soll das Attribute "name" in A gespeichert werden und die zugehörigen Werte in Tabelle B.
In den Daten die ich bekomme, ist das Attribute "name" redundant. Daher die ManyToOne Relation.
Momentan erstelle ich aus den bekommen Daten jeweils ein Objekt für Tabelle A und Tabelle B. Und füge diese dann in die Datenbank ein.
Dadurch dass ich immer wieder ein neues Objekt für Tabelle A erstelle, fügt er dieses auch wieder ein.
Ich möchte aber, dass z.B. nur einmal "Hans" in der Tabelle A auftaucht, auch wenn ich ein neu erstelltes Objekt mit "Hans" hinzufüge, aber dieses Objekt auch in Objekt von Tabelle B legen kann, damit die IDs richtig gesetzt werden. (Sehr verwirrend geschrieben *sry*, Beispielcode gibt es unten)
Im Grunde suche ich momentan eine Lösung, um die Daten die ich bekomme in zwei Tabellen aufzuteilen. Aber zwischen den Tabellen besteht
keine 1 zu 1 Beziehung.
Wäre auch Denkbar, dass ich nur ein Objekt erstelle, dass ich persistieren möchte, aber dieses in
zwei Tabellen aufteile. Nur hat dies auch nicht so geklappt, wie ich es mir vorstelle.
Meinen Ansatz kann auch gerne verworfen werden und anders angegangen werden. Das Ziel ist es nur, in dieses Datenbank-Schema die Daten zu bekommen und das möglichst effizient!
Klar könnte ich jedes mal bevor ich für Tabelle A ein neues Objekt erstelle, in der DB nachschauen, aber dies kommt mir sehr ineffizient vor. Daher suche ich noch eine andere Möglichkeit.
Ein bisschen Beispiel-Code noch, um mein Problem zu verdeutlichen:
Objekt A:
Code:
@Entity
public class A {
@Id
@GeneratedValue
int id;
int name;
// Constructor, getter and setter ...
}
Objekt B:
Code:
@Entity
public class B {
@Id
@GeneratedValue
int id;
@ManyToOne
@JoinColumn(name = "aID")
A a;
int value;
// Constructor, getter and setter ...
}
in der main:
Code:
A a1 = new A("Hans");
B b1 = new B(8, a1);
session.save(a1);
session.save(b1);
A a2 = new A("Hans");
B b2 = new B(2, a2);
session.save(a2);
session.save(b2);
Was ich gerne hätte ist, dass "Hans"
einmal in Tabelle A auftaucht und
zwei Einträge in Tabelle B mit dem richtigen Fremdschlüssel auf "Hans" existieren.
Ich bekomme aber zwei Einträge mit "Hans" in Tabelle A und zwei Einträge in Tabelle B die auf unterschiedliche Einträge in Tabelle A verweisen.