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

Ograniczenie ilości mieszkańców w domu jednorodzinnym
KA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 27
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

Riddle
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 10227
1

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

B9
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 66
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

markone_dev
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 833
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.

T2
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 5
0

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

piotrpo
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3297
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.

_13th_Dragon
  • Rejestracja: dni
  • Ostatnio: dni
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.