Я использую SpringBoot 2.1.3 + JPA + Thymeleaf.Я становился «большим», когда попадал в маленькую проблему, которую мог бы решить грубым образом, но, если это возможно, я хотел бы сделать это хорошо.
Предположим, у меня есть 2 класса сущностей:
@Entity
@Data
@Table(name = "Users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
private String nome;
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "user_id", referencedColumnName = "id")
private Address address;
}
и затем:
@Entity
@Data
@Table(name = "ADDRESS")
public class Address {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
private String descrizione;
@OneToOne(mappedBy = "address")
private User user;
}
Теперь у меня есть контроллер, который загружает все адреса, присутствующие в БД
@GetMapping("/showForm")
public String showUserForm(Model model) {
model.add("addresses", addressRepository.findAll());
model.add("user", new User());
}
Страница Thymeleaf:
.....
<form id="form" action="" th:action="@{/save-user}" th:object="${user}" method="post">
<select th:field="*{address}" id="address">
<option th:each="add : ${addresses}" th:value="${add.id}" th:text="${add.description}"></option>
</select>
<input type="submit"></input>
</form>
.....
Когда я отправляю форму JPA, извлекаю объект адреса из его значения Id.Но если я создаю форму, связывающую UserDTO и AddressDTO, я не могу получить объект AddressDTO из поля выбора, а просто значение Id.
Я не могу использовать сущность внутри моей формы, потому что есть 4 варианта, которые предоставляютзагрузка файла и внутри сущности у меня есть тип байта [] для этого 4 атрибута и вместо этого в моем DTO MultipartFile.
Есть ли способ сделать то же самое с DTO ??Спасибо