Igen, a vevő entitásnak szándékosan van 2 @Id-je tehát a primary key 2 mezőből áll.
Az id-t én generálom mikor a vevő entitás először kerül mentésre. A "masodik hivatkozo rekord" beszúrásának elvileg meg sem kellene történnie mert már létezik.
A folyamat a következő képen kellene hogy kinézzen:
1. Valamikor a múltban keletkeztek vevő entitások, melyek perzisztálva is lettek.
2. Keletkezik egy új
Gepkocsientitás, mely
List<Vevocim> vevocimek;listájához hozzá szeretnék adni
entity.getVevocimek().add(cim) egy vevőcímet mely ekkor már létezik.
Tehát azt szeretném, hogy perzisztáláskor elmentse mind a
Gepkocsientitást a
GEPKOCSItáblába, mind pedig a megfelelő iserteket beszúrja a
GEPKOCSI_VEVOCIM_OSSZERENDELOtáblába ami összerendeli a gépkocsit a vevő címekkel. Na ez nem történik meg,
Cannot add or update a child row: a foreign key constraint failshibával elszáll mert valószínűleg a MySQL még nem látja a
GEPKOCSItáblában a rekordot és mivel egy foreign key constrait van rajta dob egy hátast.
Viszont ha a folyamat úgy történik, hogy először létrehozok egy a gépkocsi entitást, kitöltöm minden mezőjét, de nem adok a vevőcím listához egyetlen rekordot sem, kiadok egy persist utasítást, akkor elmenti, majd ehhez a mentett entitáshoz adok vevő címeket és újra elmentem, akkor már nem ad ilyen hibát, mert létezik adatbázis szinten is a
GEPKOCSItáblában a rekord így a
GEPKOCSI_VEVOCIM_OSSZERENDELOtábla constraintjei nem sérülnek.
A kérdés, hogy fel lehet e úgy annotálni ezt a Gepkocsi osztályt, hogy először mentse el magát a Gépkocsi osztályt és ha ez megtörtént csak utána perzisztálja a
@OneToMany private List<Vevocim> vevocimek; kapcsolatot.
Vagy a JPA ezt nem tudja lekezleni és keressek más megoldást?