hibernate的多对多(1)

1.herbernate一对多自关联
树形菜单查询可能出现的问题

        当加载一级节点的时候没问题(强制加载);
        加载二级加载时候,由于设置了强制加载,同样可以加载出所有的二级节点。没问题;
        加载三级节点时,这是session关闭了,并且默认采用的是懒加载

	 *  权限菜单加载有两种方式
	 * (1)、一次性将数据库表中的数据全部加载往浏览器返回(适用于菜单较少)
	 * (2)、菜单表数据量较大,当出现浏览器卡顿的情况,第一种情况就不适用了
	 *   那么就采用菜单逐级加载。
	``    

2.多对多级联查询 书籍表、书籍类别表:
①:以前我们要查询多个表的关系需要用到多表联查:
select * from Book b,Book_category bc, category where b.bid=bc.bid and bc.bic=c.cid and bid = 2
②:在hibernate中,你只管查询当前表对象即可, hibernate会自动关联桥表以及关联表查询出关联对象

配置文件:

<!---
table:桥接表
-->
1.book.hbm.xml
<set table="t_hibernate_book_category"   name="category"  cascade="save-update" inverse="false">
<!--one--->
      <key  column="bid"></key>
      <!--many--->
      <many-to-many  column="cid"  class="com.zking.five.entity.Category"> 
      </many-to-many>
</set>
2.category.hbm.xml
<set table="t_hibernate_book_category" name="books" cascade="save-update" inverse="true">
        <key  column="cid"></key>
        <many-to-many  column="bid"  class="com.zking.five.entity.Book"></many-to-many>
</set>

sql的形成过程分析:
首先根据 session.get(Book.class,5) 这个方法 得到
sql=select * from t_hibernate_book where bookId=?(5)
得到结果集 resultSet—>拿到book类的实例
Book book= Class.forName(“com.zking,five.entity.Book”);//没值的
因为配置文件中封装了一些book属性,所以我们可以拿到一个Filed(配置文件)属性 ------------>根据xml建模等操作
然后将book类的属性一个个赋值进去
book.setBookId(5);
book.setBookName(a);
book.setPrice(10)
这些都是通过反射去做的

categories为什么有值?
1、建模之后通过当前实体类的映射文件找到set标签中的table属性
select * from t_hibernate_book_category
2、继续读取配置文件,拿到set标签中的子标签key的column属性(当前类对应的表主键在)
select cid from t_hibernate_book_category where bid = ?(bookId=5)
执行了这条sql语句又形成了一个
resultSet---->cid
3、set标签—>many-to-class
com.zking.five.entity.Category
category.hbm.xml
select * from t_hibernate_category
4、利用桥接表查询出来的数据查询关联表
where categry_id in (cid);
cid cname
5、EntityBaseDao中的executeQuery方法,对result进行处理,
最终返回
list categories = new AttrayList();
while(rs.next){
Categry c = Class.forName(“com.zking,five.entity.Book”);
c.set…
category.add©;
}
6、book.setCategoies(categgories);

猜你喜欢

转载自blog.csdn.net/lisacheni/article/details/83421742