/ / Czy jest możliwe tymczasowe wyłączenie kaskadowania dla elementu Hibernacji? - Java, hibernacja, jpa, usuwanie kaskadowe, kaskadowanie

Czy jest możliwe tymczasowe wyłączenie kaskadowania dla elementu Hibernacji? - Java, hibernacja, jpa, usuwanie kaskadowe, kaskadowanie

Biorąc pod uwagę obiekt Hibernacja / JPA z opcją kaskadowania ustawioną na ALL dla podmiotu powiązanego:

@Entity
public class Entity {
@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, mappedBy = "entity")
private Set<RelatedEntities> relatedEntities;
}

Czy jest możliwe tymczasowo wyłączyć kaskadowanie, np. aby pozwolić na przetrwanie Jednostki bez utrzymywania związanych z nią Zasad?

Odpowiedzi:

1 dla odpowiedzi № 1

Nie, nie można tego zrobić, przynajmniejwedług mojej skromnej opinii, nie byłoby to również korzystne. Kiedy inni deweloperzy przyglądają się odwzorowaniom i kodowi, który się utrzymuje / scala / usuwa ... oczekiwaliby zastosowania kaskad i wprowadzenia nieoczekiwanego zachowania, gdyby nadzorowali, że kaskady są tymczasowo wyłączone gdzie indziej dla kodu, którego dotyczą zmienić.

Można jednak odwzorować na tę samą tabelę nową klasę encji, która nie zawiera zmiennych kaskadowych. Następnie użyj tego obiektu w sytuacjach, w których nie chcesz, aby kaskady zostały zastosowane.


1 dla odpowiedzi nr 2

Nie możesz tymczasowo wyłączyć kaskadowania (przynajmniej według mojej wiedzy), ale ponieważ używasz Hibernate, możesz wstaw nowy podmiot za pomocą HQL

String hqlInsert = "insert into DelinquentAccount (id, name) select c.id, c.name from Customer c where ...";
int createdEntities = s.createQuery( hqlInsert ).executeUpdate();

Zawsze istnieje "ręczne" rozwiązanie, o którym pamiętasz relatedEntities w zmiennej do późniejszego użycia i ustawić null wartość jako jego wartość na Entity wystąpienie przed jego utrwaleniem.