使用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 ]