您当前的位置: 首页 >  ssh

宝哥大数据

暂无认证

  • 0浏览

    0关注

    1029博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

SSH02-声明式事务

宝哥大数据 发布时间:2017-09-08 07:35:16 ,浏览量:0

1、在我们删除组的时候,如果组中有user, 就无法删除
    /**
     * 由于Group, 和User关联, 如果组中有User, 就不能够删除
     */
    public void delete(int gid) {
        if (userHibernateDao.getGroupUserCount(gid) >0) {
            throw new UserException("用户组中有关联用户");
        }
        groupHibernateDao.delete(gid);
    }
2、现在如果先将组中成员先删除, 然后再删除组, 2.1、删除组中用户 2.1.1、遍历组中成员 list(), 一个个删除delete(u.getId)   这种方法效率低,有多少个user, 就需要多少个sql 2.1.2、Hibernate提供一种DML操作, 能够提供批量处理   UserHibernateDao中

    @Override
    public void delteByGroup(int gid) {
        String hql = "delete from User u where u.group.id = :gid";
        //bulk delete
        this.getSession().createQuery(hql).setParameter("gid", gid).executeUpdate();

    }
2.2 GroupService的delete(int gid)
    /**
     * 由于Group, 和User关联, 如果组中有User, 就不能够删除
     */
    public void delete(int gid) {
        //先删除组中用户
        userHibernateDao.delteByGroup(gid);
        //在删除组
        groupHibernateDao.delete(gid);
    }
2.3、在GroupAction中创建delete()
    /**
     * 删除组操作
     * @return
     */
    public String delete() {
        groupService.delete(group.getId());
        //设置跳转的url
        ActionContext.getContext().put("url", "/group_list.action");
        //删除时候重新调到展示, 客户端跳转
        return "redirect";
    }
3、声明式事务 如果在上面删除组中用户和删除组的中间出现异常, 会导致事务不完整, 导致数的不完整
    /**
     * 由于Group, 和User关联, 如果组中有User, 就不能够删除
     */
    public void delete(int gid) {
        userHibernateDao.delteByGroup(gid);
        //设置测试异常
        if (userHibernateDao.getGroupUserCount(gid) >0) {
            throw new UserException("用户组中有关联用户");
        }
        groupHibernateDao.delete(gid);
    }
结果: 用户删除了, 组没有删除,导致数据的不完整性,应该在一个事务中执行,如果放在Dao中操作, 导致Dao的不干净, 3.1、Spring提供了声明式事务, 3.1.1、我们现在的事务是声明在Dao
    
    
        
        
        
    
3.1.2、通常我们会在Service中来处理多个业务对象逻辑的关系, 注入删除,更新等, 如果在执行一个步骤抛出异常就会导致数据不完整, 所以事务不应该在Dao层处理, 而是在Service, 这是Spring所提供的一个非常方便的工作, 声明式事务
    
    
        
        
        
    
3.1.3、为了提高效率,可以将一些查询类的事务设置为只读事务

    
    
        
            
                
                
                
                
                
                
        
    
关注
打赏
1587549273
查看更多评论
立即登录/注册

微信扫码登录

0.0390s