chcę utrzymywać jednostkę macierzystą z 20 jednostek podrzędnych, mój kod jest poniżejJPA Utrzymują rodzica i dziecko z jednego do wielu relacji
klasa nadrzędna
@OneToMany(mappedBy = "parentId")
private Collection<Child> childCollection;
klasa Child
@JoinColumn(name = "parent_id", referencedColumnName = "parent_id")
@ManyToOne(optional=false)
private Parent parent;
String jsonString = "json string containing parent properties and child collection"
ObjectMapper mapper = new ObjectMapper();
Parent parent = mapper.readValue(jsonString, Parent.class);
public void save(Parent parent) {
Collection<Child> childCollection = new ArrayList<>() ;
for(Child tha : parent.getChildCollection()) {
tha.setParent(parent);
childCollection.add(tha);
}
parent.setChildCollection(childCollection);
getEntityManager().persist(parent);
}
Więc jeśli istnieje 20 tabel podrzędnych, to muszę ustawić nadrzędną referencję w każdym z nich, ponieważ muszę napisać 20 dla pętli? Czy to możliwe? czy istnieje jakakolwiek inna metoda lub konfiguracja, w której mogę automatycznie utrzymać rodzica i dziecko?
Wydaje się, że jest to bardziej pytanie o JSON niż pytanie WZP. Jeśli Twój JSON zostanie usunięty, aby ustalić właściwe relacje, to posiadanie dzieci po zapisaniu rodzica jest po prostu kwestią dodania odpowiednich opcji kaskadowych do @OneToMany (zakładając, że twoje odwzorowania są poprawne) –
Jeśli nie wysyłasz dziecka -> Relacja rodzica z powrotem, lub nie jest ustawiona w tym, co jest zbudowane z JSON-a, tak, musisz ręcznie ustawić to w każdym elemencie podrzędnym. Alternatywą jest uczynienie relacji jednokierunkową: usuń zmapowany = "rodzic" z OneToMany i zamiast tego podaj wartość JoinColumn. Spowoduje to, że OneToMany ustawi klucz obcy w tabeli podrzędnej zamiast być ustawiane przez odniesienie potomka do jego obiektu nadrzędnego (wtedy należy usunąć atrybut i odwzorowanie rodzica potomnego). – Chris