Gewusst wie: Auffüllen von foreign key-Werte in einer Hibernate + Spring JPA-Konfiguration, wenn die parent/child-Objekte sind persistent in der gleichen Zeit?

Habe ich zwei Objekte, Elternteil und Kind. Kind hat einen ausländischen key zurück zu PARENT_ID Feld in der ÜBERGEORDNETEN Tabelle (MySQL Datenbank).

Wenn ein Elternteil und Kind-Objekt erstellt/zusammengestellt in der gleichen Zeit, und bleiben bestehen, heißt, das Kind PARENT_ID foreign key wird nicht automatisch aufgefüllt.

Beispielcode:

@Entity
@Table(name = "PARENT")
public class Parent {
    @Column(name = "PARENT_ID")
    private Long parentId;

    @OneToMany(mappedBy = "parent")
    private List<Child> children;
}

@Entity
@Table(name = "CHILD")
public class Child {
    @Column(name = "CHILD_ID")
    private Long childId;

    @Column(name = "PARENT_ID")
    private Long parentId;

    @ManyToOne
    @JoinColumn(name = "parent_id")
    private Parent parent;
}

Habe ich zwei Proben für die Persistenz:

1) die Verwendung einer Hibernate-EntityManager:

@PersistenceContext
EntityManager em;

...

em.persist(parent);

2) Mit einem Spring Data JPA JpaRepository Beispiel:

public interface ParentRepository extends JpaRepository<Parent, Long> {

}

Und in meinem ParentServiceImpl:

@Autowired
private ParentRepository parentRepository;

...

public Parent save(Parent parent) {
    return parentRepository.save(parent);
}

Was ist die empfohlene Strategie, um darüber zu gehen, bevölkern die foreign key? Sollte das Parent-Objekt gespeichert werden und erst dann das Kind-Objekt foreign key setzen an diesem Punkt? Oder gibt es eine Möglichkeit zu bestehen, alles auf einmal, mit der foreign key festgelegt wird, automatisch oder by reference?

Edit: Persistenz Proben Hinzugefügt.

Edit 2 (behoben!): Problem gelöst, wie pro Ryan Stewart ist der zweite Punkt. Ich entfernte die Lange parentId-Feld aus der Kind-Objekt, und legen Sie die @Column reference) für die parentId, die auf die get-Methode. Auch sicher zu set-up Referenzen korrekt (vor allem beim Kind, den Bezug zu Übergeordneten).

  • Zeigen Sie den code, den Sie verwenden, um zu beharren beide.
  • Fertig! Ich mache nur eine einzige bestehen call-in beiden Beispielen. Kaskaden und alle Aktualisierungen und Einfügungen, wo die Eltern foreign key ist pre-set (Elternteil zuerst gespeichert).
  • Zeigen Sie uns den vollständigen code. Wie konstruieren Sie die Eltern und das Kind. Wie assoziieren Sie Sie? Sie reden über die Kaskaden, aber Sie haben nicht alle in den code geschrieben. Wenn Sie möchten, uns zu erklären, wie der code muss festgelegt werden, nach dem code, den Sie verwenden.
  • Der code ist Komplex, deshalb wollte ich den Fokus auf das spezifische problem hatte ich mit einem einfachen Fall. Ryan Stewart Antwort das problem gelöst (seine 2. Punkt). Danke!!
InformationsquelleAutor skel625 | 2012-05-26
Schreibe einen Kommentar