Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 带Hibernate数据保存错误的Spring MVC_Java_Spring_Hibernate_Jakarta Ee_Spring Mvc - Fatal编程技术网

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段)

我希望它能帮助你