Spring 弹簧靴&x2B;JPA(Hibernate)编辑部分实体字段

Spring 弹簧靴&x2B;JPA(Hibernate)编辑部分实体字段,spring,hibernate,jpa,Spring,Hibernate,Jpa,全部 我有以下简单的表单,我想在其中编辑实体。问题是我有一些不想编辑的字段。例如(图像文件路径) 现在,我有了服务方法- public void addOrModifyLayout(Layout layout){ if(layout.getId() == null){ layoutRepository.save(layout); } else { Layout modifiedLayout = new Layout();

全部

我有以下简单的表单,我想在其中编辑实体。问题是我有一些不想编辑的字段。例如(图像文件路径)

现在,我有了服务方法-

public void addOrModifyLayout(Layout layout){
    if(layout.getId() == null){
        layoutRepository.save(layout);
        }
    else {
        Layout modifiedLayout = new Layout();
        modifiedLayout.setId(layout.getId());
        modifiedLayout.setName(layout.getName());
        modifiedLayout.setStatus(layout.getStatus());
        modifiedLayout.setExhibitor(layout.getExhibitor());
        layoutRepository.save(modifiedLayout);
    }
}
如您所见,我希望能够编辑的每个字段都应该明确地将其放入服务中。我可以使用一些映射器或技巧只更新视图(表单)中的一些字段吗?你如何处理这类问题

您可以

将所有实体字段存储在隐藏输入中(例如imageFilePath隐藏输入)。因此,您可以在UI上存储所有实体字段,并将它们重新分配给实体

避免创建新实体,但检索现有实体并仅填写必要的字段

Layout modifiedLayout = layoutRepository.getById(layout.getId());
modifiedLayout.setName(layout.getName());
modifiedLayout.setStatus(layout.getStatus());
modifiedLayout.setExhibitor(layout.getExhibitor());
layoutRepository.save(modifiedLayout);

您可以使用HQL。请看这里(第二个示例)我的第一个想法是将所有字段存储在隐藏输入中,但这仅适用于简单数据。。如果有一个实体或地图的集合。。。不可能存储所有内容(例如密码?),然后使用第二种方法