Uniemożliwienie wprowadzenia duplikatów w bazie biorąc pod uwagę dwie kolumny

0

Witam

Dodałem do bazy danych tabele, w której chciałem aby nie można było wprowadzać duplikatów w obrębie dwóch kolumn.
Rozwiązałem to w taki sposób że przy tworzeniu tabeli w SQL dodałem constraina

ALTER TABLE tabela1 ADD CONSTRAINT unique_group UNIQUE(kolumna1, kolumna2);

i wszystko jest ok dopóki nie chciałem tego rekordu usunąć w JPA.

repository.delete(entity);

Wie ktoś w jaki sposób uzyskać unikalność w obrębe dwóch kolumn z możliwością usunięcia wiersza?
Z góry dzięki

1

A jaki masz błąd? Dlaczego nie możesz go usunąć?

0

org.h2.jdbc.JdbcSQLIntegrityConstraintViolationException: Naruszenie więzów integralności: "CONSTRAINT_C647: PUBLIC.STUDENT_DETAILS FOREIGN KEY(ID_GROUP) REFERENCES PUBLIC.STUDENT_GROUP(ID) ('3374147e-fef5-457d-b980-c6323c62bc0a')"
Referential integrity constraint violation: "CONSTRAINT_C647: PUBLIC.STUDENT_DETAILS FOREIGN KEY(ID_GROUP) REFERENCES PUBLIC.STUDENT_GROUP(ID) ('3374147e-fef5-457d-b980-c6323c62bc0a')"; SQL statement:
delete from student_group where id=? [23503-200]

3

Pluje się o całkiem inny klucz. Masz założony klucz obcy na innej tabelce do tej i próbujesz usnąć rekord który jest powiązany z innym

0

Hmmm faktycznie może być. Zapomniałem że dane są ładowane w @PostConstruct.
Sprawdzę i jutro dam znać.

0

Wszystko się zgadza temat do zamknięcia.

1

Jednak wracając do tematu, dla potomności

Unikalny indeks na dwóch polach, oraz inne środki zabezpieczenia oparte o warstwę bazy danych. Gdy mamy to we wdrożeniu JPA, są egzekwowane później niż się intuicyjnie wydaje, nie w momencie "nielegalnych" operacji w kodzie Java, tylko podczas zapisu sesji/transakcji.

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