使用spring处理请求/响应中的非表单域的正确方法?

问题描述:

我有一个基于Hibernate的模型对象,比如有10个字段。我需要将其中的六个传递给Spring表单并将其取回,但其他四个不需要往返表单。但是,当Hibernate对象保存在数据库中时,他们需要坚持以更新/创建。如果我不需要,我宁愿不将它们作为隐藏字段放在表单上,​​其中一些可能有敏感数据。使用spring处理请求/响应中的非表单域的正确方法?

这样做的最好方法是什么?我已经在网上寻找解决方案,但信息/示例相当稀少。

我一直在创建一个Hibernate POJO的实例作为请求范围的Spring bean,但我似乎无法得到正确的语法。

无论是东西线创建基本DTO只使用六个字段,然后使用返回的反序列化数据更新实体。

或者只是序列化整个hibernate实体,然后反序列化回来并合并。

就你而言,真正的四个领域使圆形truip真的没有太大的区别。更可能的安全将是一个问题。

在我的应用程序中,我设置了一些转换服务来自动化实体的反序列化。

DTO在从一些不同的实体呈现数据以用于一种形式时非常有用。

不要创建请求作用域bean,这是矫枉过正。四个未使用的字段将坚持,他们坚持在数据库/存储在任何休眠缓存。

在优化之前担心您的api设计

如果模型的所有属性都不会发送到弹簧前端(表单隐藏),否则您将丢失数据,除非将它保存在某处(Session,StaticMap,数据库),这可能是一个代价高昂的操作。如果不想两次点击数据库,请将带有Key的静态映射放置为用户和对象标识,并为旧对象赋值。

如何在Hibernate中为该实体设置second level cache,以便在使用从UI接收的属性更新数据库时不必从数据库中重新加载实例。

我的方法是将一个单独的表单支持对象。沿

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); 
    } 
}