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;
}
小技巧:先写等号右边的,然后判断返回是啥类型呦!