mysql - 双向多对一关联。插入新子项时,还会插入一个新的不需要的父项,并与子项具有相同的名称
问题描述
我的目标是从下拉列表中选择现有的父项,并在文本输入中创建一个名称为新的子项。
插入新子时,还会插入一个新的不需要的父级,其名称与新子级相同。我认为我的问题出在我的 HTML 代码中,但我已将所有相关代码添加到问题中。
我正在使用 Spring MVC、Spring JPA 和 Thymeleaf。
提交后,我在控制台中得到了这个
Marken name= Example Marke
Geschaeftsfeld name= Example Marke
Hibernate: insert into geschaeftsfeld (name, id) values (?, ?)
Hibernate: insert into Marke (geschaeftsfeld_id, name, id) values (?, ?)
如您所见,父名称和子名称相同。父名称应该是下拉列表中选择的名称。
我认为错误出在我的 HTML 代码(thymeleaf)中,由于某种原因,它为这两个属性设置了相同的名称。如果我错了,我在下面添加了我的父类代码和子类。
<form action="#" th:action="@{/neuemarke}" th:object="${marke}" method="POST">
<select class="form-control" th:field="${geschaeftsfeld}" id="geschaeftsfeld">
<option value="0">select Geschaeftsfeld</option>
<option th:each="gf : ${listAllGf}" th:value="${gf.id}" th:text="${gf.name}"></option>
</select>
<input type="text" th:field="${marke.name}" placeholder="Name" class="form-control mb-4 col-4">
<button type="submit" class="btn btn-info col-2"> Save </button>
</form>
控制器
@GetMapping({"/einstellungenmarken"})
public String einstellungenMarke(Model model) {
//fügt die listen zu den Modell hinzu
model.addAttribute("listAllGf", gfService.getAllGeschaeftsfelds());
model.addAttribute("listAllMk", mkService.getAllMarken());
model.addAttribute("geschaeftsfeld", new Geschaeftsfeld());
model.addAttribute("marke", new Marke());
//gibt den template zurück (HTML)
return "/Einstellungen/marken";
}
@PostMapping("/neuemarke")
public String neueMarke(@ModelAttribute("marke") Marke marke,
@ModelAttribute("geschaeftsfeld") Geschaeftsfeld geschaeftsfeld) {
System.out.println("Marken name= " + marke.getName());
System.out.println("Geschaeftsfeld name= " +
geschaeftsfeld.getName());
marke.setGeschaeftsfeld(geschaeftsfeld);
mkService.save(marke);
return "redirect:/einstellungenmarken";
}
任何帮助深表感谢
解决方案
我在我的 HTML 代码中发现了错误。
th:field="*{geschaeftsfeld}"
代替th:field="${geschaeftsfeld}"
和
th:field="*{name}"
代替th:field="${marke.name}"
<form action="#" th:action="@{/neuemarke}" th:object="${marke}" method="POST">
<select class="form-control" th:field="*{geschaeftsfeld}" id="geschaeftsfeld">
<option value="0">select Geschaeftsfeld</option>
<option th:each="gf : ${listAllGf}" th:value="${gf.id}" th:text="${gf.name}"></option>
</select>
<input type="text" th:field="*{name}" placeholder="Name" class="form-control mb-4 col-4">
<button type="submit" class="btn btn-info col-2"> Save </button>
</form>
推荐阅读
- mysql - 如何修复此 SQL 语句?
- html - 如何将旋转图像保持在破折号的下边界内?
- angular - div *ngIf="is_auto===false" 未显示
- r - 如何在大型 (300k * 10k) 数据集上执行 NMDS(布雷柯蒂斯距离)?
- bash - ldapsearch 查找用户列表
- python - Raspberry上的Rfid rc522长时间停止读取
- python - 如何使用 Selenium/Python 获取 javaScript 生成的链接文本
- python - 如何在 python 脚本中激活 venv
- python - 3D 弯曲通道的最小横截面——Python 中的解决方案?
- excel - 计算是否或任何其他替代方案以使其更快地工作