我有一个基于 Hibernate 的模型对象,例如,有十个字段。我需要将其中六个传递给 Spring 表单并将它们取回,但其他四个不需要往返表单。但是,当 Hibernate 对象保存在数据库中时,它们确实需要坚持更新/创建。如果不需要,我宁愿不要将它们作为隐藏字段放在表单上,其中一些具有潜在的敏感数据。
最好的方法是什么?我在网上寻找解决方案,但信息/示例相当稀疏。
我一直在尝试将 Hibernate POJO 的实例创建为请求范围的 Spring bean,但我似乎无法获得正确的语法。
我有一个基于 Hibernate 的模型对象,例如,有十个字段。我需要将其中六个传递给 Spring 表单并将它们取回,但其他四个不需要往返表单。但是,当 Hibernate 对象保存在数据库中时,它们确实需要坚持更新/创建。如果不需要,我宁愿不要将它们作为隐藏字段放在表单上,其中一些具有潜在的敏感数据。
最好的方法是什么?我在网上寻找解决方案,但信息/示例相当稀疏。
我一直在尝试将 Hibernate POJO 的实例创建为请求范围的 Spring bean,但我似乎无法获得正确的语法。
我的方法将是一个单独的表单支持对象。类似的东西
public class ModelForm {
//required fields
public ModelForm(Model model){
//set the values from model
}
//getters and setters
public void update(Model model){
//set values back to the model
}
}
public class ModelController {
public <return-type> submit(@ModelAttribute ModelForm form) {
Model model = loadModel(form);//Load the model object from DB using a id or some other property
form.update(model);
//other logic
save(model);
}
}
仅使用六个字段创建基本 DTO,然后使用返回的反序列化数据更新实体。
或者简单地将整个休眠实体序列化,然后反序列化并合并。
由你决定,因为四个领域使回合 truip 真的不会有太大的不同。更可能的安全将是一个问题。
在我的应用程序中,我设置了许多转换服务来自动反序列化实体。
当以一种形式呈现来自多个不同实体的数据时,DTO 很有用。
不要创建请求范围的 bean,那是矫枉过正。四个未使用的字段将保留,它们被持久化在数据库中/存储在任何休眠缓存中。
在优化之前担心你的 api 设计
如果模型的所有属性都没有发送到弹簧前端(表单为隐藏),您将丢失数据,除非您将其保存在某处(会话、静态映射、数据库),这可能是一项代价高昂的操作。如果不想两次访问数据库,请放入一个以 Key 为用户和对象 id 的 staticMap 并为旧对象赋值。
如何在 Hibernate 中为该实体设置二级缓存,以便在使用从 UI 接收的属性更新实例时不必从 DB 重新加载实例。