return list;
}
注意:查出的list的意义。
5)BO (main)中,写调用该DAO方法:
List list= DAO对象.listAllUsrCascadeAuthorization();
Usr userpo=(Usr)list.get(0); //这个是一个Usr PO对象。
Set st=userpo.getAuths(); //取出该Usr PO对象中的关联属性Set
//遍历HashSet,it.next(),取出的是该Usr PO的一个权限PO。 ----晒晒老知识:Set只能遍历,不易于单个读取。
//注意:检索策略;User----Authorization;默认使用延迟检索;---所以,不要关闭Session;
如果改为立即检索;---则可能提取出所有的权限对象;www.2cto.com
如果再配有反向的Authorization----User;且为立即检索,---则连锁效应可能提取大量无用的关联对象;
作业:撰写代码实现查询,查出《usr表》中name='张局长' 的user用户,其所拥有的各个(或第一个)权限,和其他哪些用户同时拥有这些权限?
要求:必须列出张局长拥有哪些权限,及其权限名;
还要列出每个权限所有拥有者的用户名;
答案:
---BO:
UserDao userDao = new UserDao();
User findUserByName = userDao.findUserByName("张局长");
System.out.println("张局长的ID号: "+findUserByName.getId());
Set auths = findUserByName.getAuths(); //▲延迟加载,关联集合其中PO为代理对象;
//▲注意:因为是延迟加载,所以自动使用Hibernate实现的PersistenceSet,不能强制转换回HashSet;
System.out.println("权限个数: "+auths.size()); //▲用到此PO时,临时加载;
Iterator it = auths.iterator();
while(it.hasNext()){
Authorization az = (Authorization)it.next(); //◆取出一个权限对象; 用到此PO时,临时加载;
System.out.println("==权限ID号为:"+az.getId()); //用到此PO属性时,临时加载属性值;
System.out.println("权限号为:"+az.getAuth());
//提取该权限的所有用户; 也是延迟加载;
Set users = az.getUsers();//拿到该权限的用户集合;
Iterator iterator = users.iterator();//遍历该用户集合;
while(iterator.hasNext()){
User user = (User)iterator.next(); //◆取出一个拥有该权限的用户; 用到此PO时,临时加载;
System.out.println("\t拥有该权限的用户:"+user.getName()+"\t用户ID号: "+user.getId()); //用到此PO时,临时加载;
}
}
//关闭Session;
//如果后续还要使用该Session,进行其他Dao操作,则仅关闭该Session缓存,但并不使其消失;
userDao.sessionClose(); www.2cto.com
所有操作完毕后,无需Session,此时应关闭Session使其消失;
userDao.closeSession();
数据例子: 《user表》中,1号的张局长,《userauth表》中,拥有:10号、22号权限;
4号 赵科长, 也拥有:10号;
5号 刘。。, ......:10号;
《userauth》表
┌───┬───┬───┐
│ id │ uid │ auid │
├───┼───┼───┤
│ 1 │ │ │
├───┼───┼───┤
│ 2 │ 1 │ 10 │
├───┼───┼───┤
│ 3 │ 2 │ 15 │
├───┼───┼───┤
│ 4 │ 1 │ 22 │
├───┼───┼───┤
│ 5 │ │ │
├───┼───┼───┤
│ │ │ │
├───┼───┼───┤
│ │ 5 │ 10 │
├───┼───┼───┤
│ │ 2 │ 22 │
└───┴───┴───┘
结果:全部延迟加载,连表查询,用的是单表select语句实现。
总结:*-*的检索策略,与1-*的检索策略,相同;
━━━━━━━━━━━━━━━━━━
延迟加载:lazy="true"
立即加载:lazy="false" fetch="select"
预先抓取:lazy="false" fetch="join"
作者:oh_Mourinho