Ograniczenie ilości mieszkańców w domu jednorodzinnym

0

Witam,

stworzyłem prostą aplikacje webową w Java - Spring boot - MySQL. Mogę tworzyć obiekty dodawać je do bazy danych usuwać takie podstawy podstawy. I pytanie Jak zabezpieczyć aplikacje aby nie można było dodać np. dwóch obiektów w tym samym czasie. Przykład tworzę dom jednorodzinny i mogę dodawać do nich mieszkańców ale jest ograniczona ilość miejsc. Np. tylko 4 miejsca. I po dodaniu pierwszych trzech na czwarte miejsce dodaje w tym samym czasie dwóch mieszkańców no i dom został przeludniony. Jak to można zabezpieczyć ? Jakies wskazówki?

Dzięki i pozdrawiam

1

Pokaż kod który ogranicza tą ilość do 4.

3

Masz relacje jeden do wielu z domem jak zakładam. Dom moze miec wiele mieszkańców. Mozesz poczytac o optimistic locking, zapisujac nowego mieszkańca podbijasz wersję domu

4

Rozwiązania w zasadzie są dwa Optimistic Locking (nieblokujące) oraz Pesimistic Locking (blokujące). Każde ma swoje wady i zalety, dobrze jest to opisane w tym artykule https://cult.honeypot.io/reads/optimistic-vs-pessimistic-concurrency/. Wybierz jedno i zaimplementuj w swojej aplikacji. Przykładowy kod też tam jest.

0

@KotAli: Następnym razem podczas tworzenia wątków dodaj chociaż fragment kodu, bo bez tego ciężko pomóc :)

2

Na poziomie bazy danych można to zabezpieczyć np. w ten sposób, ze w tabeli "mieszkańcy domu" masz kolumny id, houseId, tenantNumber, name, lastName..... i wszystko co potrzebujesz zrobić, to constrant na pole tenantNumber, że może przyjmować wartości 1..4, oraz unikalny indeks na houseId, tenantNumber.
Wtedy możesz sobie w tym springu korzystać z optimistic locking i próbować dodać mieszkańca na pierwsze wolne miejsce. Albo ci się uda, albo będzie duplicate value on index i trzeba będzie spróbować znowu.

1

insert into inhabitants(houseId,name) select {}, {} where (select count(id) from inhabitants where houseId={})<4;

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.