Najważniejszą rzeczą, na którą będziesz chciał uważać, jest zdefiniowanie strony właściciela relacji poprawnie. O ile dobrze pamiętam, moim wnioskiem z (czasem trudnej do zrozumienia) oficjalnej dokumentacji było to, że strona będąca właścicielem jest w zasadzie tą, która domyślnie uruchamia kaskady i przejrzyste usunięcia.
Na przykład powyżej zdefiniowałeś stronę będącą właścicielem jako ProjectEntity
, więc najważniejszym krokiem do działania kaskadowej trwałości jest dodanie projektu do PersonEntity.projects
.
Będziesz wtedy chciał zadzwonić persist
po stronie właściciela relacji, tj.
em.persist(projectTest);
Jeśli to nie pomoże, sugerowałbym włączenie logowania SQL u swojego dostawcy JPA, aby dowiedzieć się, jakie instrukcje próbuje on wykonać, a zwłaszcza w jakiej kolejności te encje są insert
wyd.
Spróbuj również, zgodnie z istniejącymi komentarzami, najpierw zachować osobę. Jeśli to zrobisz, uważam, że właściwym sposobem jest dodanie utrwalonego podmiot do relacji, tj.:
PersonEntity persistedPerson = em.persist(personTest);
projectTest.setPersonId(persistedPerson);
em.persist(projectTest);