当前位置: 首页 > 工具软件 > HibernateD > 使用案例 >

hibernated多对多关系原理

劳法
2023-12-01

1 我这里以书本表和类别表为例
一定义好桥接表,分别是书本,类别表的外键
session.get(Book.class,1)->
select*from t_hibernate_book where book_id=?(1)
resultSet-> 1 西游记 50
Book b=Class.forName(“com.zking.hibernate.entity.Book”).newInstance();
通过反射实例化赋值

hibernate 处理关联关系
    通过set找到桥接表(table属性),找到当前实体类对应表的主键在桥接表的外键(key标签的column属性)
select*from t_hibernate_book_category bid=1;
resultSet  cid 1,2
     然后通过set标签(many-to-many column 得到(关联表的主键在t_hibernate_book_category的外键(cid)) 通过 class得到表名(t_hibernate_category))
select * from
    t_hibernate_book_category t_hibernate_category 
inner join
    t_hibernate_category t_hibernate_category 
        on t_hibernate_category.cid=t_hibernate_category.category_id 
where
    t_hibernate_category.bid=?
     也就是内连接得到结果集
     通过反射类似于EntityBaseDao->list<category>
     在将值保存到set集合中  

3 相关配置
Book.hbm.xml

 <set name="categories" table="t_hibernate_book_category" cascade="save-update" inverse="true" >
   <!-- 配置外键字段 -->
   <key column="bid"></key>
   <!-- 配置外键关联的表(类) -->
   <many-to-many  column="cid" class="com.zking.hibernate.entity.Category"/>
  </set>

Category.hbm.xml

<set name="books" table="t_hibernate_book_category" cascade="save-update" inverse="true">
   <!-- 配置外键字段 -->
   <key column="cid"></key>
   <!-- 配置外键关联的表(类) -->
   <many-to-many column="bid" class="com.zking.hibernate.entity.Book"/>
  </set>
 类似资料: