无法将类型 'java.lang.String' 的 属性 值转换为所需类型“[]”
Failed to convert property value of type 'java.lang.String' to required type '[]'
我有两个实体,它们使用主键相互引用,主键是来自一个实体的整数。我不确定我这样做是否正确。
以下是主键id为int的实体
@Entity
@Table(name="michango_kanda")
public class Kmichango {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id")
private int id;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "kandaMchango" )
private List<Jmichango> jumuiyaMichango = new ArrayList<>();
//Constructor,toString,getter and setter,.......}
下面是我们将上述实体的外键设置为 Kmichango kandaMchango 的实体。
@Entity
@Table(name = "michango_jumuiya")
public class Jmichango {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id")
private int id;
@ManyToOne
@JoinColumn(name = "kandamchangoID")
private Kmichango kandaMchango;
//Constructor,toString,getter and setter,.......}
这是我在 jumuiya_michango_form.html
中提交用户提供的数据的部分表格
<form class="form-horizontal" method="POST" action="/save-michango-jumuiya"
style="max-width: 600px; margin: 0 auto;" >
<div class="control-group">
<label class="control-label" for="kandaMchango">Code Ya Mchango</label>
<div class="select">
<select id="kandaMchango" name="kandaMchango" required="true">
<option value="none" selected disabled hidden >
Chagua Code ya Mchango
</option>
<th:block th:each="kanda : ${kandaMichango}">
<option th:each="text : ${kanda.id}" th:value="${text}" th:text="${text}" ></option>
</th:block>
</select>
</div>
</div>
<input type="submit" value="Submit">
</form>
下面是我的控制器用于 link 表单和 post 数据的两种方法
@GetMapping("/michango/jumuiya/add")
public String addJumuiyaMichango(Model model){
List<Kmichango> kandaMichango = kMichangoRepository.findAll();
List<Jumuiya> jumuiya = jumuiyaRepo.findAll();
model.addAttribute("kandaMichango", kandaMichango);
model.addAttribute("jumuiya", jumuiya);
return "jumuiya_michango_form";
}
@PostMapping("/save-michango-jumuiya")
public String saveJumuiyaMichango(Jmichango jumuiyaMichango, BindingResult result){
if(result.hasErrors()){
System.out.println(result);
return "jumuiya_michango_form";
}
jMichangoRepository.save(jumuiyaMichango);
return "index";
}
提交表单后,我在控制台中收到来自 System.out.println(结果)的以下错误;
Blockquoteorg.springframework.validation.BeanPropertyBindingResult: 1 errors
Field error in object 'jmichango' on field 'kandaMchango': rejected value [41]; codes [typeMismatch.jmichango.kandaMchango,typeMismatch.kandaMchango,typeMismatch.com.church.church.entity.Kmichango,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [jmichango.kandaMchango,kandaMchango]; arguments []; default message [kandaMchango]]; default message [Failed to convert property value of type 'java.lang.String' to required type 'com.church.church.entity.Kmichango' for property 'kandaMchango'; 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.church.church.entity.Kmichango] for value '41'; nested exception is org.springframework.dao.InvalidDataAccessApiUsageException: Provided id of the wrong type for class
com.church.church.entity.Kmichango. Expected: class java.lang.Integer, got class java.lang.String; nested exception is java.lang.IllegalArgumentException: Provided id of the wrong type for class com.church.church.entity.Kmichango. Expected: class java.lang.Integer, got class java.lang.String]
错误很明显,它无法转换值类型,现在如何解决这个问题并仍然保持这两个实体的关系?
里面 jumuiya_michango_form.html 你有一个 select
请将其更改为 name="kandaMchango.id",因为您实际上想将 selected 选项的值映射到 kandaMchango 对象的 ID。
我有两个实体,它们使用主键相互引用,主键是来自一个实体的整数。我不确定我这样做是否正确。
以下是主键id为int的实体
@Entity
@Table(name="michango_kanda")
public class Kmichango {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id")
private int id;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "kandaMchango" )
private List<Jmichango> jumuiyaMichango = new ArrayList<>();
//Constructor,toString,getter and setter,.......}
下面是我们将上述实体的外键设置为 Kmichango kandaMchango 的实体。
@Entity
@Table(name = "michango_jumuiya")
public class Jmichango {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id")
private int id;
@ManyToOne
@JoinColumn(name = "kandamchangoID")
private Kmichango kandaMchango;
//Constructor,toString,getter and setter,.......}
这是我在 jumuiya_michango_form.html
中提交用户提供的数据的部分表格 <form class="form-horizontal" method="POST" action="/save-michango-jumuiya"
style="max-width: 600px; margin: 0 auto;" >
<div class="control-group">
<label class="control-label" for="kandaMchango">Code Ya Mchango</label>
<div class="select">
<select id="kandaMchango" name="kandaMchango" required="true">
<option value="none" selected disabled hidden >
Chagua Code ya Mchango
</option>
<th:block th:each="kanda : ${kandaMichango}">
<option th:each="text : ${kanda.id}" th:value="${text}" th:text="${text}" ></option>
</th:block>
</select>
</div>
</div>
<input type="submit" value="Submit">
</form>
下面是我的控制器用于 link 表单和 post 数据的两种方法
@GetMapping("/michango/jumuiya/add")
public String addJumuiyaMichango(Model model){
List<Kmichango> kandaMichango = kMichangoRepository.findAll();
List<Jumuiya> jumuiya = jumuiyaRepo.findAll();
model.addAttribute("kandaMichango", kandaMichango);
model.addAttribute("jumuiya", jumuiya);
return "jumuiya_michango_form";
}
@PostMapping("/save-michango-jumuiya")
public String saveJumuiyaMichango(Jmichango jumuiyaMichango, BindingResult result){
if(result.hasErrors()){
System.out.println(result);
return "jumuiya_michango_form";
}
jMichangoRepository.save(jumuiyaMichango);
return "index";
}
提交表单后,我在控制台中收到来自 System.out.println(结果)的以下错误;
Blockquoteorg.springframework.validation.BeanPropertyBindingResult: 1 errors Field error in object 'jmichango' on field 'kandaMchango': rejected value [41]; codes [typeMismatch.jmichango.kandaMchango,typeMismatch.kandaMchango,typeMismatch.com.church.church.entity.Kmichango,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [jmichango.kandaMchango,kandaMchango]; arguments []; default message [kandaMchango]]; default message [Failed to convert property value of type 'java.lang.String' to required type 'com.church.church.entity.Kmichango' for property 'kandaMchango'; 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.church.church.entity.Kmichango] for value '41'; nested exception is org.springframework.dao.InvalidDataAccessApiUsageException: Provided id of the wrong type for class com.church.church.entity.Kmichango. Expected: class java.lang.Integer, got class java.lang.String; nested exception is java.lang.IllegalArgumentException: Provided id of the wrong type for class com.church.church.entity.Kmichango. Expected: class java.lang.Integer, got class java.lang.String]
错误很明显,它无法转换值类型,现在如何解决这个问题并仍然保持这两个实体的关系?
里面 jumuiya_michango_form.html 你有一个 select
请将其更改为 name="kandaMchango.id",因为您实际上想将 selected 选项的值映射到 kandaMchango 对象的 ID。