【发布时间】:2018-08-24 14:24:48
【问题描述】:
我的 JPA 实体客户有 50 个字段,我想使用 html 表单从最终用户那里更新它。
我将一个实体实例传递给 html 页面表单(使用 thymeleaf),该表单只有 50 个字段中的 20 个(包括 ID 字段)。现在,一旦提交了表单,我想将使用表单接收到的数据中的 20 个字段更新到数据库。我没有得到上述问题的解决方案。一种解决方案是更新单个字段,但我认为这不是一个好的解决方案。
@Entity
public class Customer
{
...
50 fields
}
我的get方法:
@GetMapping(value = "customer")
public String customer(Model model) {
Customer customer = null;
Optional<Customer> optional = customer Repo.findById(customerId);
if (optional.isPresent()) {
customer = optional.get();
}
model.addAttribute("customer", Customer);
return "customer";
}
HTML 格式:
<form action="updateCustomer">
----20 fields which I would like to get update from user are here
</form>
@PostMapping(value = "updateCustomer")
public String updateCustomer(Model model, @ModelAttribute Customer customer) {
if(customer==null) {
System.out.println("Customer object is null");
}
else
{
customerRepo.save(customer);
}
return "savedCustomer";
}
在 post 方法中,当我获取客户对象时,它只有 20 个字段数据而不是 50 个(客户实体有总字段),因为 html 表单只有 20 个字段需要更新。如何使用更新了 20 个字段的新客户对象更新具有 50 个字段的旧客户对象?
【问题讨论】:
-
这里没有足够的信息来帮助我不认为。除了代码繁琐之外,更新字段有什么问题?他们得到什么类型的值(来自其他数据或静态)?。
-
@CollinD 问题中提供了更多详细信息。请看一看。
-
所以,澄清一下,你想基本上从数据库中获取一个
Customer,并用你的表单中的数据覆盖它的20个字段(即:左合并你的新@ModelAttribute Customer),并且然后保存? -
@CollinD 是的。你说的对。调用单个字段的 20 个设置器的基本方法。但我认为可能有更好的解决方案。
-
在这种情况下,请查看stackoverflow.com/questions/24865923/… 在 Spring 的 BeanUtils 类中有一些内置功能可以管理这个。我不能说它的可定制性和安全性如何,但它很可能是可能的。但是,如果这只是为了节省一些输入,那么可能值得考虑跳过增加的复杂性。
标签: spring spring-mvc jpa spring-data-jpa