生活随笔
收集整理的這篇文章主要介紹了
Hibernate 关联映射 之 多对多 关联(二) 之拆分
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1、由問題引出一個多對多拆分成兩個多對一
??? 問題:Hibernate 關聯映射 之 多對多 關聯(一)中中間表只是一個存放用戶和角色的表,并無其他作用,如果客戶有其他的需求,該表就無法擴展。
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 关联映射 之 多对多 关联(二) 之拆分的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。