Cześć! Tak jak w temacie - borykam się z problemem nadpisywania wartości w mojej bazie danych. Projekcik jest skromny, wykonany w springu. Dwie encje - User i Book. Zależność @OneToMany. Klucz obcy user_id. Teraz schemacik: strona startowa to lista wszystkich użytkowników, na niej mam przycisk dodania nowego użytkownika. Po jego stworzeniu mogę do każdego przypisać książkę. Klikam w przycisk "Add book" przy użytkowniku dajmy na to o Id=1, wyświetlany jest formularz do stworzenia ksiazki (pola tytul, autor) a nastepnie ksiazka ląduje do bazy danych a widok przeskakuje znowu do listy użytkowników. I teraz mój problem - jeśli znowu wybiorę użytkownika od Id=1 czyli klucz obcy dla nowej książki będzie taki sam jak dla poprzednio stworzonej książki to poprzednia książka zostanie nadpisana w bazie. To samo tyczy się oczywiście użytkowników o innych Id ;) Nie wiem gdzie może błąd występować, jeśli kod do wglądu jest potrzebny to proszę o napisanie, którą warstwę udostępnić (kontroler, widok) to edytuję post :) Będę wdzięczny za każdą pomoc :P
@PostMapping("/user/{id}/saveBook")
public String saveBook(@ModelAttribute Book book, @PathVariable("id") Long id) {
User user = userService.findById(id);
book.setUser(user);
bookService.saveBook(book);
return "redirect:/user/list";
}
@GetMapping("/user/{id}/new")
public String showAddBookForm(Model model, @PathVariable("id") Long id, User user){
Book book = new Book();
model.addAttribute("book", book);
model.addAttribute("user", user);
return "book-form";
}
```java
Templatka book-form:
```html
<form th:object="${book}" th:action="@{'/user/' + ${user.id} + '/saveBook'}" method="post">
<table>
<tr>
<input type="text" th:field="*{title}" placeholder="Title" />
<input type="text" th:field="*{author}" placeholder="Author" />
<select class="form-control" th:field="*{bookCategory}">
<option th:each="category : ${T(com.skoczek.demo.model.BookCategory).values()}"
th:value="${category.name()}"
th:text="${category.name()}"
>val</option>
</select>
</tr>
<button type="submit">Save</button>
</table>
</form>
```html