日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Hibernate 关联映射 之 多对多 关联(二) 之拆分

發(fā)布時間:2025/6/15 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Hibernate 关联映射 之 多对多 关联(二) 之拆分 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1、由問題引出一個多對多拆分成兩個多對一

??? 問題:Hibernate 關聯(lián)映射 之 多對多 關聯(lián)(一)中中間表只是一個存放用戶和角色的表,并無其他作用,如果客戶有其他的需求,該表就無法擴展。

2、問題解決過程:

用戶、角色 之間的關系拆分成用戶和用戶角色、角色和用戶角色的關系,即:兩個多對一的關系。

小技巧:如何去判斷多對一還是一對多對象,要從對象的角度來看,即:從一個對象的角度去看另一個對象。

用戶:

[java] view plain copy print?
  • public?class?User?{??
  • ??
  • ????private?int?id;??
  • ????private?String?name;??
  • ????private?String?password;??
  • ????private?Set<UserRole>?roles;??
  • 用戶配置文件:

    [html] view plain copy print?
  • <hibernate-mapping>??
  • ????<class?name="com.shangxuetang.User"?table="t_user">??
  • ????????<id?name="id">??
  • ????????????<generator?class="native"/>??
  • ????????</id>??
  • ????????<property?name="name"></property>??
  • ????????<property?name="password"></property>??
  • ????????<set?name="roles">??
  • ????????????<key?column="userID"></key>??
  • ????????????<one-to-many?class="com.shangxuetang.UserRole"/>??
  • ????????</set>??
  • ????</class>??
  • </hibernate-mapping>??
  • 角色:

    [java] view plain copy print?
  • public?class?Role?{??
  • ????private?int?id;??
  • ????private?String?name;??
  • ????private?Set<UserRole>?users;??
  • 角色配置文件:

    [html] view plain copy print?
  • <hibernate-mapping>??
  • ????<class?name="com.shangxuetang.Role"?table="t_role">??
  • ????????<id?name="id">??
  • ????????????<generator?class="native"/>??
  • ????????</id>??
  • ????????<property?name="name"></property>??
  • ????????<set?name="users">??
  • ?????????????<key?column="roleID"></key>??
  • ?????????????<one-to-many?class="com.shangxuetang.UserRole"/>??
  • ????????</set>??
  • ????</class>??
  • </hibernate-mapping>??
  • 用戶角色:

    [java] view plain copy print?
  • public?class?UserRole?{??
  • ??
  • ????private?int?id;??
  • ????private?User?user;??
  • ????private?Role?role;??
  • ????private?Date?assignTime;??
  • ??????
  • ????public?UserRole()?{}??
  • ????public?UserRole(User?u,Role?r)?{??
  • ????????this.user?=?u;??
  • ????????this.role?=?r;??
  • ????????this.assignTime?=?new?Date();??
  • ????}??
  • 用戶角色配置文件:

    [html] view plain copy print?
  • <hibernate-mapping>??
  • ????<class?name="com.shangxuetang.UserRole"?table="t_userrole">??
  • ????????<id?name="id">??
  • ????????????<generator?class="native"/>??
  • ????????</id>??
  • ????????<property?name="assignTime"?type="date"></property>??
  • ????????<many-to-one?name="user"?column="userID"></many-to-one>??
  • ????????<many-to-one?name="role"?column="roleID"></many-to-one>??
  • ??????????
  • ????</class>??
  • </hibernate-mapping>??
  • 測試示例代碼:

    [java] view plain copy print?
  • public?void??testManytoManyChaiFen()?{??
  • ????????Session?session?=?HibernateUtil.getSession();??
  • ????????try?{??
  • ????????????session.beginTransaction();??
  • ??????????????
  • ????????????User?u1?=?new?User("zhangsan");??
  • ????????????session.save(u1);??
  • ????????????User?u2?=?new?User("lisi");??
  • ????????????session.save(u2);??
  • ??????????????
  • ????????????Role?r1?=?new?Role("adminstor");??
  • ????????????session.save(r1);??
  • ????????????Role?r2?=?new?Role("usualuser");??
  • ????????????session.save(r2);??
  • ????????????Role?r3?=?new?Role("VIPuser");??
  • ????????????session.save(r3);??
  • ??????????????
  • ????????????UserRole?ur1?=?new?UserRole(u1,r1);??
  • ????????????session.save(ur1);??
  • ??????????????
  • ????????????UserRole?ur2?=?new?UserRole(u1,r2);??
  • ????????????session.save(ur2);??
  • ??????????????
  • ????????????UserRole?ur3?=?new?UserRole(u2,r1);??
  • ????????????session.save(ur3);??
  • ??????????????
  • ????????????UserRole?ur4?=?new?UserRole(u2,r3);??
  • ????????????session.save(ur4);??
  • ??????????????
  • ????????????UserRole?ur5?=?new?UserRole(u2,r2);??
  • ????????????session.save(ur5);??
  • ??????????????
  • ????????????session.getTransaction().commit();??
  • ????????}catch(Exception?e)?{??
  • ????????????e.printStackTrace();??
  • ????????????session.getTransaction().rollback();??
  • ????????}finally?{??
  • ????????????session.close();??
  • ????????}??
  • ????}??

  • 總結

    以上是生活随笔為你收集整理的Hibernate 关联映射 之 多对多 关联(二) 之拆分的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。