Я начал изучать весну несколько недель go, и пока все идет хорошо. Но есть какой-то неприятный обходной путь, который беспокоит меня уже несколько дней. Вкратце: я получаю объект (из одной таблицы базы данных библиотека ) с дочерним объектом, который является списком (из другой таблицы book ). Библиотека и список книг загружаются правильно, когда она вызывается - мой класс библиотеки выглядит следующим образом.
@Data
@Entity
public class Library implements Serializable {
…
@OneToMany(mappedBy = „library“)
@JsonManagedReference
private List<Book> books;
…
}
Я создал веб-сайт с html и тимелистом, чтобы показать все данные в форме html. Где-то внутри формы я поместил элемент управления select, как показано здесь:
<select id="selectReader" name="selectReader" th:object="${bookstore.selectedReader}" th:field="*{id}" class="form-control form-control-sm" required="true" onchange="submit()">
<option th:value="-1">Add Reader</option>
<option th:each="item : ${readers}" th:value="${item.id}" th:text="${item.name}"/>
</select>
Но когда я щелкаю элемент управления select, страница перезагружается и список книг исчезает.
@PostMapping("/updateBookstore/{id}")
public String updateBookstore(@PathVariable int id, @ModelAttribute Bookstore bookstore, Model model) {
// bookstore.books is null
// also checking the model for the attribute "bookstore.books" is null
}
Мой текущий обходной путь - сохранить мой библиотечный объект в закрытом поле RestController, тогда список книг все еще там. Но это кажется мне плохой практикой.
Как я могу настроить код так, чтобы библиотека всегда загружалась со списком книг без этого обходного пути? Пожалуйста, скажите мне, если у вас есть идея.