使用Spring Hibernate .
我使用Spring Boot,Thymeleaf,Hibernate和JPA来开发这个应用程序 . 我已经映射了两个实体之间的关系 . 这是实体 .
Star.java
@Entity
public class Star {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@NotNull
@Size(min = 2, max = 30, message = "Должно быть >2, но <30 символов")
private String name;
@NotNull
@Size(min = 2, max = 10, message = "Должно быть >2, но <30 символов")
private String xCoord;
@NotNull
@Size(min = 2, max = 10, message = "Должно быть >2, но <30 символов")
private String yCoord;
private String color;
@ManyToOne
@JoinColumn(name = "discoverer_id",
foreignKey = @ForeignKey(name = "PERSON_ID_FK")
)
private Discoverers discoverer;
public Star() {
}
Discoverers.java
@Entity
public class Discoverers {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@NotNull
@Size(min = 2, max = 30, message = "Должно быть >2, но <30 символов")
private String name;
public Discoverers() {
}
我的控制器
@RequestMapping(value = "/", method = RequestMethod.POST) public String addStar(@Valid Star star, BindingResult result, Model model, RedirectAttributes redirectAttributes) {
model.addAttribute("discoverers", discoverersService.findAll());
if (result.hasErrors()) {
redirectAttributes.addFlashAttribute("org.springframework.validation.BindingResult.star", result);
redirectAttributes.addFlashAttribute("star", star);
return "redirect:/add";
}
starService.save(star);
redirectAttributes.addFlashAttribute("flash", new FlashMessage("Звезда добавлена!", FlashMessage.Status.SUCCESS));
return "redirect:/"; }
我正在用Thymeleaf用html来表达它 . 现在,我无法从html表单添加新的Star实体 . 如何添加到:值对象Discoverer?
action="@{${action}}" method="post" th:object="${star}">
...blablabla...
<div class="row">
<label for="discoverer" class="col-sm-2 col-form-label">Открыватель</label>
<div class="col s8 l8">
<select th:field="*{discoverer}" id="discoverer" class="cs-select cs-skin-border">
<option value="" disabled="disabled">Первооткрыватель</option>
<option th:each="discoverer : ${discoverers}" **th:value="${discoverer}"** th:text="${discoverer.name}">Аристотель</option>
<option value="0">Добавить нового открывателя</option>
</select>
</div>
错误:org.springframework.validation.BeanPropertyBindingResult:1个错误对象'star'字段错误'discoverer':被拒绝的值[3];代码[typeMismatch.star.discoverer,typeMismatch.discoverer,typeMismatch.com.testgreetgo.stars.model.Discoverers,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable:codes [star.discoverer,discoverer];参数[];默认消息[discoverer]];默认消息[无法将'java.lang.String'类型的属性值转换为必需类型'com.testgreetgo.stars.model.Discoverers'属性'discoverer';嵌套异常是 java.lang.IllegalStateException: Cannot convert value of type 'java.lang.String' to required type 'com.testgreetgo.stars.model.Discoverers' for property 'discoverer': no matching editors or conversion strategy found ]