Java 带Hibernate数据保存错误的Spring MVC
我有两张桌子:公司和汽车。一家公司可以有许多汽车。 我无法正确地坚持一个观点。在“查看”页面中从下拉列表中选择公司 我的控制器Java 带Hibernate数据保存错误的Spring MVC,java,spring,hibernate,jakarta-ee,spring-mvc,Java,Spring,Hibernate,Jakarta Ee,Spring Mvc,我有两张桌子:公司和汽车。一家公司可以有许多汽车。 我无法正确地坚持一个观点。在“查看”页面中从下拉列表中选择公司 我的控制器 @RequestMapping("/") public String view(ModelMap model) { Map<String, String> companyList = new HashMap<String, String>(); List<Company> companies = companyServ
@RequestMapping("/")
public String view(ModelMap model) {
Map<String, String> companyList = new HashMap<String, String>();
List<Company> companies = companyService.listAllCompanies();
for (Company company : companies) {
companyList.put(String.valueOf(company.getId()), company.getName());
}
model.addAttribute("companies", companyList);
model.addAttribute("automotive", new Automotive());
return "automotive/index";
}
@RequestMapping("manage")
public String manage(@ModelAttribute Automotive automotive,
BindingResult result, ModelMap model) {
model.addAttribute("automotive", automotive);
Map<String, String> companyList = new HashMap<String, String>();
List<Company> companies = new ArrayList<Company>();
for (Company company : companies) {
companyList.put(String.valueOf(company.getId()), company.getName());
}
model.addAttribute("companies", companyList);
automotiveService.addAutomotive(automotive);
return "automotive/index";
}
@RequestMapping(“/”)
公共字符串视图(模型映射模型){
Map companyList=newhashmap();
List companys=companyService.listAllCompanies();
适用于(公司:公司){
companyList.put(String.valueOf(company.getId()),company.getName());
}
model.addAttribute(“公司”,公司列表);
model.addAttribute(“automotive”,新automotive());
返回“自动/索引”;
}
@请求映射(“管理”)
公共字符串管理(@modeldattribute Automotive,
BindingResult结果,ModelMap模型){
模型。添加属性(“汽车”,汽车);
Map companyList=newhashmap();
上市公司=新ArrayList();
适用于(公司:公司){
companyList.put(String.valueOf(company.getId()),company.getName());
}
model.addAttribute(“公司”,公司列表);
汽车服务。添加汽车(汽车);
返回“自动/索引”;
}
我的看法
<form:form action="/Automotive/manage" modelAttribute="automotive">
Name : <form:input path="name" />
Description : <form:input path="description" />
Type : <form:input path="type" />
Company : <form:select path="company" items="${companies}" />
<input type="submit" />
</form:form>
姓名:
说明:
类型:
公司:
Q1>从逻辑上讲,不会保存预期的公司id,因为在视图中它是一个id,但实际上在保存时它应该是Company类型的对象。我应该如何解决这个问题。我需要使用DTO还是有直接的方法
Q2>我不能直接将公司列表传递给视图,而不是在controller中创建一个新映射吗?您可以使用公司id作为键,然后使用转换器,它将自动将数据从表单转换为域对象。就像在这段代码中:
public class CompanyIdToInstanceConverter implements Converter<String, Company> {
@Inject
private CompanyService _companyService;
@Override
public Company convert(final String companyIdStr) {
return _companyService.find(Long.valueOf(companyIdStr));
}
}
公共类CompanyIdToInstanceConverter实现转换器{
@注入
私人公司服务;
@凌驾
上市公司转换(最终字符串COMPANYDSTR){
return(companyService.find)(companyIdStr)的Long.valueOf);;
}
}
在JSP中:
<form:select path="company" items="${companies}" itemLabel="name" itemValue="id"/>
如果您还没有接触到类型转换,您可能需要阅读更多有关类型转换的内容。SpringDoc中对它进行了完美的描述(我无法找到:第5.5段)
我希望它能帮助你