Operacje kaskadowe – OrphanRemoval=true


Operacje kaskadowe – OrphanRemoval=true

JPA może wykonać daną operację zarówno na encji jak i na jej zagregowanych składowych. Encje które używają relacji są często uzależnione od istnienia encji należącej do relacji. Np. LineItem jest częścią encji Order. Jeśli Order zostanie usunięte to wszystkie encje LineItem również zostaną usunięte:

@OneToMany (cascade = REMOVE , mappedBy = "order")
public Set <LineItem > geItems () {
    return items ;
}

Co jeśli przypadek zakłada usunięcie encji podrzędnych? Jako, że JPA domyślnie zakłada związek agregacji co oznacza, że obiekty podrzędne mogę istnieć bez obiektów nadrzędnych to opcja:

cascade = REMOVE

nie wystarcza. Trzeba zastosować dodatkowy parametr w adnotacji @OneToMany:

@OneToMany ( mappedBy =" order ", orphanRemoval =" true")
public List < LineItem > geItems () {
    return items ;
}

Osierocone rekordy (z ang. Orphan records) to rekordy mające klucz obcy który odwołuje się do tabeli w której klucz ten nie wskazuje na żaden inny rekord:

Znalezione obrazy dla zapytania orphan records

[źródło] https://database.guide/what-is-an-orphaned-record/


Leave a comment

Your email address will not be published.


*