0

我有一个基于 Hibernate 的模型对象,例如,有十个字段。我需要将其中六个传递给 Spring 表单并将它们取回,但其他四个不需要往返表单。但是,当 Hibernate 对象保存在数据库中时,它们确实需要坚持更新/创建。如果不需要,我宁愿不要将它们作为隐藏字段放在表单上,​​其中一些具有潜在的敏感数据。

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

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

4

4 回答 4

1

我的方法将是一个单独的表单支持对象。类似的东西

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);
    }
}
于 2013-03-01T13:30:58.573 回答
1

仅使用六个字段创建基本 DTO,然后使用返回的反序列化数据更新实体。

或者简单地将整个休眠实体序列化,然后反序列化并合并。

由你决定,因为四个领域使回合 truip 真的不会有太大的不同。更可能的安全将是一个问题。

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

当以一种形式呈现来自多个不同实体的数据时,DTO 很有用。

不要创建请求范围的 bean,那是矫枉过正。四个未使用的字段将保留,它们被持久化在数据库中/存储在任何休眠缓存中。

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

于 2013-03-01T13:34:56.137 回答
0

如果模型的所有属性都没有发送到弹簧前端(表单为隐藏),您将丢失数据,除非您将其保存在某处(会话、静态映射、数据库),这可能是一项代价高昂的操作。如果不想两次访问数据库,请放入一个以 Key 为用户和对象 id 的 staticMap 并为旧对象赋值。

于 2013-03-01T13:10:31.363 回答
0

如何在 Hibernate 中为该实体设置二级缓存,以便在使用从 UI 接收的属性更新实例时不必从 DB 重新加载实例。

于 2013-03-01T13:18:22.937 回答