Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie füllt man Fremdschlüsselwerte in einer Hibernate + Spring JPA-Konfiguration, wenn übergeordnete/untergeordnete Objekte gleichzeitig beibehalten werden?

Dieser Code hat zwei Dinge, die ihn daran hindern, zu funktionieren:

  1. Ihre Entitäten haben keine @Id . Sie haben es wahrscheinlich einfach weggelassen, weil dies ein Beispiel ist, aber es lohnt sich, darauf hinzuweisen.
  2. Sie haben die Spalte parent_id doppelt zugeordnet . Das untergeordnete Feld hat sowohl ein langes Feld als auch ein übergeordnetes Feld, die derselben Spalte zugeordnet sind. Werde das Lange los. Es ist die Elternbeziehung, nach der Sie suchen.

Danach haben Sie dort ein völlig traditionelles bidirektionales One-to-Many mit einer Join-Spalte. Wenn es bei Ihnen nicht funktioniert, machen Sie etwas im Code falsch, in dem Sie sie erstellen und speichern. Sehr wahrscheinlich erstellen Sie die Objekte nicht richtig. Korrekter Code, der diese Entitäten verwendet, würde in etwa so aussehen:

Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
Parent p = new Parent();
Child child = new Child();
child.parent = p;
Child child1 = new Child();
child1.parent = p;
p.children = Arrays.asList(child, child1);
session.save(p);
session.save(p.children.get(0));
session.save(p.children.get(1));
tx.commit();

Beachten Sie insbesondere, dass das Kind im Elternteil und das Elternteil im Kind gesetzt werden sollte. Erstellen Sie kein halb kaputtes Objektmodell und erwarten Sie, dass Hibernate Ihr Chaos aufräumt. Viele Leute ignorieren diese scheinbar offensichtliche Anforderung und fragen sich, warum Hibernate instabil und/oder unzuverlässig erscheint.