js中将保存和修改功能 **数据丢失问题** 【动态修改】隐藏域传参 @ModelAtrribute @Column(updatable=false) n to n的问题 OID

12 篇文章 0 订阅

保存功能js代码 js中将保存和修改功能写在一起了,这里通过判断是否有Id来判断页面路径应该请求后端的哪个路径的方式。

//保存功能
        save(){
            var url = "/employee/save";
            //获到id的值
            var employeeId = $("#employeeId").val();
            if(employeeId){
                url = "/employee/update?cmd=_update";
            }
            //easyui的form提交
            editForm.form('submit', {
                //提交的路径
                url:url,
                //提交之前的操作
                onSubmit: function(){
                    // 做一些检查
                    // 返回false可以阻止提交;
                    return $(this).form('validate');
                },
                //data : {success:true/false,msg:xxx} -> 字符串
                success:function(data){
                   var result = JSON.parse(data);
                   if(result.success){
                       employeeGrid.datagrid("reload");
                   }else{
                       $.messager.alert('错误',`失败了,打我啊! 原因是:${result.msg}`,"error");
                   }
                   //关闭弹出框
                    itsource.closeDialog();
                }
            });
        },

数据丢失问题—修改信息时。

在这里插入图片描述
在这里插入图片描述1、隐藏域传参–>最简单,不安全,如果字段太多,隐藏域就会写很多,代码多且乱。【很少使用】
2、SQL不去改动它—>简单,但以后要去修改就麻烦了。在domain的改字段上填加注解:@Column(updatable=false)

3、路径访问Controller层的每个方法前,都将先执行@ModelAtrribute里面的代码
@ModelAtrribute

  /**
     *ModelAttribute:路径访问Controller的每个方法,都会先执行它里面的代码
     */
    @ModelAttribute("editEmployee")
    public Employee beforeEdit(Long id,String cmd){
        if(id!=null && "_update".equals(cmd)){
            //修改才执行这个代码
            Employee dbEmployee = employeeService.findOne(id);
            //解决n-to-n的问题,把关联对象设置为null
            dbEmployee.setDepartment(null);
            return  dbEmployee;
        }
        return null;
    }

由于前端只要传id后端都会执行 @ModelAttribute(“editEmployee”)里的代码
影响性能

所以,前端多传一个参数 url = “/employee/update?cmd=_update”;只有修改传了_update的时候才会执行。

 //保存功能
        save(){
            var url = "/employee/save";
            //获到id的值
            var employeeId = $("#employeeId").val();
            if(employeeId){
                url = "/employee/update?cmd=_update";
            }

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

n to n的问题:一个持久化的OID是不允许被修改的(不能修改主键)。

Hibernate使用对象标识符(Object Identifier, OID)来建立内存中的对象和数据库表中记录的对应关系,对象的OID和数据库表的主键
在这里插入图片描述在这里插入图片描述解决办法:将关联对象设置为空,这样spring底层会new一个关联对象,这个对象不是持久化对象了,这样来修改关联对象的id了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值