class Parent { @OneToMany(mappedBy = "parentId", fetch = FetchType.EAGER) Set children; }
i
class Child { int parentId; }
Chcę usunąć sobie Parent z bazy, ale bez usuwania Child. Jednak dostaję exception: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Cannot delete or update a parent row: a foreign key constraint fails
Jak zrobić by hibernate nie tworzył constraint przy @OneToMany?
Po pierwsze zamiast inta zmień na Integer bo typ prosty nie może być nullem. I nie wiem czy w takim wypadku przed usunięciem rodzica nie musiałbyś ustawić parentId wszystkich dzieci na null.
@slucham-psa-jak-gra: No to słabo to wygląda. No bo jeżeli chcę utworzyć Child to muszę najpierw muszę pobrać z bazy Parent z podanym id, a następnie zapisać Child z Parentem w polu.
@slucham-psa-jak-gra: @Porana123: No bo po pierwsze wydaje mi się, że jest to mało optymalne. Po drugie, chcę mieć możliwość użycia Set children w innych obiektach, nie tylko Parent Po trzecie, chcę aby Child miał parentId mimo usunięcia parenta, a nie żeby ta wartość się zerowała.
@siemanko: No to ustaw żeby olewał foreign keye i Hibernate tego sam nie będzie chciał usuwać, tylko że to jest bezsensu. Mówisz mało optymalne, jak ty byś to chciał inaczej, żeby użytkownik podawał jakiś parentId do konsoli i liczyć, że to jest prawdziwe bez patrzenia do bazy? (pomijając, że trzeba to podpiąć do obiektu, bo jak już pisali wcześniej, powinno być Parent parent zamiast int parentId). A tego o używaniu
@Porana123: @slucham-psa-jak-gra: @nuker92: Ale ok, dzięki chłopaki, przynajmniej teraz rozumiem jak to należy rozwiązać chcąc korzystać w pełni z ORM.
Mirki mam problem. Jest klasa:
class Parent {
@OneToMany(mappedBy = "parentId", fetch = FetchType.EAGER)
Set children;
}
i
class Child {
int parentId;
}
Chcę usunąć sobie Parent z bazy, ale bez usuwania Child. Jednak dostaję exception:
com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Cannot delete or update a parent row: a foreign key constraint fails
Jak zrobić by hibernate nie tworzył constraint przy @OneToMany?
@siemanko: spróbuj dodać CascadeType.REMOVE
Po pierwsze zamiast inta zmień na Integer bo typ prosty nie może być nullem. I nie wiem czy w takim wypadku przed usunięciem rodzica nie musiałbyś ustawić parentId wszystkich dzieci na null.
Jeżeli jest tak jak mówisz to o kant rozbić ten cały ORM.
Bo tworząc obiekt Child nie mam pojęcia o Parent. Znaj jedynie
class Child {
int parentId;
}
tylko działał na obiektach
No bo jeżeli chcę utworzyć Child to muszę najpierw muszę pobrać z bazy Parent z podanym id, a następnie zapisać Child z Parentem w polu.
Po drugie, chcę mieć możliwość użycia Set children w innych obiektach, nie tylko Parent
Po trzecie, chcę aby Child miał parentId mimo usunięcia parenta, a nie żeby ta wartość się zerowała.
Da się to zrobić bez pobierania obiektu z bazy danych:
http://stackoverflow.com/questions/31929447/hibernate-persist-entity-without-fetching-association-object-just-by-id