TypeMismatch 当我尝试保存 java spring boot @onetomany 关系时

问题描述

我从控制器的“保存”方法中收到 TypeMismatch 错误。 它是一个标准的实体、控制器、存储库 + thymeleaf 模板。 错误是:

2021-03-08 19:32:25.396 DEBUG 4501 --- [nio-8081-exec-3] o.s.web.method.HandlerMethod             : Could not resolve parameter [0] in public java.lang.String com.revistas.controllers.IssueController.saveIssue(com.revistas.entities.Issue): org.springframework.validation.BeanPropertyBindingResult: 1 errors
Field error in object 'issue' on field 'magazine': rejected value [18]; codes [typeMismatch.issue.magazine,typeMismatch.magazine,typeMismatch.com.revistas.entities.Magazine,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [issue.magazine,magazine]; arguments []; default message [magazine]]; default message [Failed to convert property value of type 'java.lang.String' to required type 'com.revistas.entities.Magazine' for property 'magazine'; nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type [java.lang.String] to type [@javax.persistence.ManyToOne @javax.persistence.JoinColumn com.revistas.entities.Magazine] for value '18'; nested exception is java.lang.IllegalStateException: Repository doesn't have a find-one-method declared!]

我知道错误消息试图告诉我,当要保存的 id 很长时,被拒绝的值 [18] 是一个字符串,但我不明白该错误的原因,因为它运行良好在另一个实体、控制器、存储库中。 下面是代码一个实体

 @Id
    @Column(name = "id_magazine")
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long idMagazine;
    
    @Column(name = "magazineName",unique = true,nullable = false)
    private String magazineName;

    @Pattern(regexp = "[\\S]{4}\\-[\\S]{4}")
    @Column(name = "isbn",nullable = false,length = 9)
    private String magazineIssn;

    @ManyToOne(targetEntity = Editor.class)
    @JoinColumn(name = "id_editor")
    private Editor editor;

    @OnetoMany(targetEntity = Issue.class,mappedBy = "magazine",cascade = CascadeType.MERGE)
    private List<Issue> issues = new ArrayList<Issue>();

    @ManyToMany(mappedBy = "categoryMagazines")
    private List<Category> categories = new ArrayList<Category>();

许多实体

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id_issue")
    private Long idissue;

    @Column(name = "issue_number",nullable = false)
    private String number;

    @Column(name = "issue_title",nullable = true)
    private String title;

    @Column(name = "issue_pages",nullable = true)
    private Integer pages;

    @Column(name = "issue_date",nullable = true)
    private Date issueDate;

    @Column(name = "issue_cover")
    private String cover;

    @Pattern(regexp = "[\\S]{4}\\-[\\S]{4}\\-[\\s]{5}")
    @Column(name = "issue_issn")
    private String issueIssn;

    @ManyToOne(targetEntity = Magazine.class,cascade = CascadeType.ALL,fetch = FetchType.LAZY)
    @JoinColumn(name = "id_magazine")
    private Magazine magazine;

    @OnetoMany(targetEntity = Article.class,fetch = FetchType.EAGER,mappedBy = "issue")
    private List<Article> articles = new ArrayList<Article>();

许多控制器:

    //Get all issues
    @GetMapping("/all")
    public String getAllIssues(Model model){
        model.addAttribute("issues",repository.findAll());
        return "/issues";
    }

    //Create a new issue
    @GetMapping("/new")
    public String newIssueForm(Model model){
        List<Magazine> listMagazines = magazineRepository.findAll();
        model.addAttribute("issue",new Issue());
        model.addAttribute("magazines",listMagazines);
        return "addissue";
    }

    //Save the issue
    @PostMapping("/saveissue")
    public String saveIssue(Issue issue){
        repository.save(issue);
        return "redirect:/issue/" + issue.getIdissue();
    }

    //Get one issue by id

和百里香模板的相关部分

            <form action="#" method="post" th:object="${issue}" th:action="@{/issues/saveissue}">
                <div class="form-group row">
                    <div class="mb-3">
                        <label th:utext="#{label.pages.newissue.magazine}"></label>
                        <div class="input-group">
                            <select th:field="*{magazine}" class="form-control" required>
                                <option th:each="magazine : ${magazines}" th:text="${magazine.magazineName}" th:value="${magazine.idMagazine}"/>
                            </select>
                        </div>
                    </div>
                </div>

谢谢

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...