Naruszenie więzów spójności

0

Przy usuwaniu wyskakuje mi błąd w logach "naruszono więzy spójności (FK_X_TEMPLATE) - znaleziono rekord podrzędny". Jak mogę się tego błędu pozbyć?

Wydaje mi się ze muszę zmienić coś w encji która posiada klucz FK? Tu kawałek kodu w którym mi się wydaję że powinienem coś zmienić

@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "TEMPLATE_ID")
	private InEntity template;
0

A co się ma stać kiedy masz obowiązkową relację do innej tabeli i usuwasz rekord z tamtej tabeli? Czy relacja jest jednaj nieobowiązkowa czy może ma nastąpić kaskadowe usuwanie?

0

Dzięki za szybką reakcję:)

Próbowałem już usnąć na samym początku @JoinColumn(name = "TEMPLATE_ID") ale nie bez efektu

Shalom- może nastąpić kaskadowe usuwanie

0

No to myk do dokumentacji!
http://docs.oracle.com/javaee/7/api/javax/persistence/ManyToOne.html
i co sie ukazuje naszym oczom? cascade! I jakie ma rodzaje?
http://docs.oracle.com/javaee/7/api/javax/persistence/CascadeType.html

0
@ManyToOne(cascade=cascadetype.remove)
 @JoinColumn(name = "TEMPLATE_ID")
    private InEntity template; 
  • też już wcześniej próbowałem chyba że źle coś napisałem ?
0
  1. To ci sie kompiluje w ogóle tak napisane? Wątpię.
  2. Skąd masz ten CascadeType? Z JPA czy z Hibernate? Bo jest i tu i tu klasa o tej nazwie i łatwo pomieszać...

Poza tym sprawdź czy teraz nie leci ci constraint na innej tabeli, bo przecież twoje InEntity pewnie też ma swoje powiązania...

0

Przepraszam za literówkę

@ManyToOne(cascade = CascadeType.REMOVE)

i ma z JPA

0

A ManyToOne masz skąd? Bo w tagach tematu widze Hibernate a nie JPA. Więc jak to jest? I pokaż jaki błąd leci teraz po dodaniu tej kaskady.

0

ManyToMany mam z JPA.

W logach leci ten sam błąd RA-02292: naruszono więzy spójności (FK_X_TEMPLATE) - znaleziono rekord podrzędny

0

A to jest jedno czy dwukierunkowa zależność? Bo mam wrażenie że robisz tu bardzo dziwną rzecz:

  • masz wiele encji X które wskazują na encję Y
  • usuwając jedną z encji X chcesz usunąć automatycznie także encje Y (kaskada przy many to one)
    Ale takie coś wymaga też kaskady w drugą stronę, przy one to many bo nie można usunąć Y bez usuwania wszystkich pozostałych X
    Więc co ty właściwie chcesz osiągnąć? Bo moze po prostu chcesz mieć kaskadę na Y, tak że usunięcie encji Y powoduje usunięcie wszystkich X?
0

Chciałbym w momencie usunięcia Y usunąć X. A jeśli dodam do Encji Y @OneToMany(mappedBy = "template") ?

1

No to daj kaskade przy onetomany po stronie Y, bo przecież w tą stronę chcesz propagować.

0

Ok. Zrobiłem tak po stronie oneToMany i działa

@OneToMany(mappedBy = "template", cascade = CascadeType.REMOVE)
	private List<y> template;

1 użytkowników online, w tym zalogowanych: 0, gości: 1