Mam w aplikacji encję filmu z przykładową z mapowaną listą
public class MovieEntity {
...
@OneToMany(mappedBy = "movie", cascade = CascadeType.ALL)
private Set<MovieOtherTitle> otherTitles;
...
}
Lista posiadana inne obiekty, które są encjami
public class MovieOtherTitle extends MovieInfo {
@Id
@GeneratedValue
private Long id;
...
}
Użytkownika ma możliwość pobrać listę tytułów danego filmu. W obecnym momencie rozwiązałem to w ten sposób. Obiekt DTO tytułu wygląda tak
public class OtherTitle {
private int index; // Numer elementu na liście tytułów
private String title;
private CountryType country;
}
Podczas edycji danego tytułu, wystarczy, że użytkownik poda numer elementu. Więc użytkownik chce edytować tytuł o numerze 3 na liścia. Użytkownik zaznacz trzeci tytuł i przechodzi na stronę i zmienia tekst. W tym momencie, wcześniej zgłoszone usunięcie drugiego elementu przez innego użytkownika zostaje zaakceptowane przez weryfikatora, dzięki czemu tytuł o numerze 3 na liście posiada 2 numer, ale na stronie dalej jest podane, że użytkownik edytuje element o numerze 3. Gdy użytkownik poprawił co chciał i nacisnął edycja, wywołało kontroler i przesłał nowy tytuł dla trzeciego elementu i próbowało poprawić element 3 na liście tytułów filmu, a tu problem, bo lista tytułów wynosi tylko dwa.
Ten problem mógłby być rozwiązany w taki sposób, że podczas gdy użytkownik zaznaczy jaki tytuł chce poprawić. Np. trzeci tytuł. Po naciśnięciu przechodzi na stronę, gdzie element 3 pobiera swoje ID i przetrzymuje na stronie. I podczas wciśnięcia przycisku popraw do kontrolera wysyłany jest element z identyfikatorem ID w bazie, a nie numerem na liście.
Co o tym sądzicie?