zoukankan      html  css  js  c++  java
  • Hibernate 多表查询、新增、删除

    有这么两个表:User和Role,一个UserID可能对应多个RoleID,它俩之间通过UserRole连接

    //查询方法

    @Override
        public List<Role> queryRoleAllByUserID(long userid) {
            Session session = HibernateUtils.getSession();
            User user= (User) session.get(User.class, userid);
            Set<UserRole> set=user.getUserRoles();   
            List<Role> list=new ArrayList<Role>();    
            for (UserRole userRole : set) {         
                list.add(userRole.getRole());         
            }
            return list;
        }

    可以倒着这么想:

      最后我是要得到Role的,那么和role有关系的是哪个呢?UseRole

      所以接着我要得到UserRole,那么通过User可以得到UserRole

      传参过来的是UserID,所以得到User就很容易了。


    //新增方法(给用户添加角色)

        可以理解成新添加一条用户角色信息,只不过是指定了某一用户,某些角色

    @Override
        public boolean addRole(long userid,List<Long> roles) {
            boolean flag = false;
            Session session = HibernateUtils.getSession();
            Transaction tx = session.beginTransaction();    
            User u=(User) session.get(User.class, userid);    
            for(Long i:roles){        
                Role role=(Role) session.get(Role.class, i);
                //u.getUserRoles().add(new UserRole(role, u));   ---这是间接添加方式
                long id = (long) session.save(new UserRole(role, u));
                if(id>0)
                {
                    flag = true;
                }
            }
            tx.commit();
            return flag;
    }

    @Test
        public void TestAdd(){
            List<Long> list = new ArrayList<Long>();
            list.add(1l);
            list.add(2l);
            System.out.println(ur.addRole(3l, list));
        }

    //删除方法----这个方法就比较简单了,通过UserID直接可以查找到用户角色,之后进行删除操作

    @Override
        public boolean deleteRoleByID(long userid) {
            boolean flag = false;
            Session session = HibernateUtils.getSession();
            Transaction tx = session.beginTransaction();    
            
            String hql = "from UserRole where userid = :userid ";
            
            List<UserRole> list =  session.createQuery(hql).setLong("userid", userid).list();
            if(list.size()!=0){
                for (UserRole ur : list) {
                    session.delete(ur);
                    flag = true;
                }
            }

            tx.commit();
            return flag;
        }

    小技巧:先写等号右边的,然后判断返回是啥类型呦!

  • 相关阅读:
    js json和对象互相转换
    github配置和git学习
    sea.js,spm学习
    less学习-语法(二)
    less学习-浏览器端编译(一)
    grunt-mac上安装运行构建工具的总结(一)
    Advice from an Old Programmer
    scikit-FEM-例2-用Morley元在方形区域上解板弯曲问题
    scikit-FEM-例1-求解Possion边值问题
    在shell脚本中调用sqlplus 分类: H2_ORACLE 2013-06-23 13:01 1437人阅读 评论(0) 收藏
  • 原文地址:https://www.cnblogs.com/zmlion1995/p/5787640.html
Copyright © 2011-2022 走看看