【发布时间】:2021-06-13 12:46:03
【问题描述】:
我有两个实体使用主键相互引用,主键是一个实体的整数。我不确定我这样做是否正确。
下面是主键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>
以下是我的控制器中用于链接到表单和发布数据的两种方法
@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(result);
收到以下错误Blockquoteorg.springframework.validation.BeanPropertyBindingResult: 1 个错误 字段“kandaMchango”上的对象“jmichango”中的字段错误:拒绝值 [41];代码 [typeMismatch.jmichango.kandaMchango,typeMismatch.kandaMchango,typeMismatch.com.church.church.entity.Kmichango,typeMismatch];参数 [org.springframework.context.support.DefaultMessageSourceResolvable:代码 [jmichango.kandaMchango,kandaMchango];论据 [];默认消息 [kandaMchango]];默认消息 [无法将类型“java.lang.String”的属性值转换为属性“kandaMchango”所需的类型“com.church.church.entity.Kmichango”;嵌套异常是 org.springframework.core.convert.ConversionFailedException: 无法从类型 [java.lang.String] 转换为类型 [@javax.persistence.ManyToOne @javax.persistence.JoinColumn com.church.church.entity.Kmichango]值“41”;嵌套异常是 org.springframework.dao.InvalidDataAccessApiUsageException:为类提供了错误类型的 id com.church.church.entity.Kmichango。预期:类 java.lang.Integer,得到类 java.lang.String;嵌套异常是 java.lang.IllegalArgumentException:为类 com.church.church.entity.Kmichango 提供了错误类型的 id。预期:类 java.lang.Integer,得到类 java.lang.String]
错误很明显是值类型转换失败,现在我该如何解决这个问题并且仍然保持这两个实体的关系?
【问题讨论】:
-
似乎您的 fomr 提供了一个字符串,广告您正在尝试设置一个 int。
-
如何在不影响@jr593 关系的情况下更改此设置
标签: java spring spring-boot spring-mvc thymeleaf