生活随笔
收集整理的這篇文章主要介紹了
Hibernate 关联映射 之 多对多 关联(一)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
1、了解幾個知識點:
一、一般的設(shè)計中,多對多關(guān)聯(lián)映射,需要一個中間表
二、Hibernate會自動生成中間表
三、Hibernate使用many-to-many標(biāo)簽來表示多對多的關(guān)聯(lián)
四、多對多的關(guān)聯(lián)映射,在實體類中,跟一對多一樣,也是用集合來表示的
2、示例代碼(用戶和角色之間的關(guān)系是多對多)
用戶的示例代碼:
[java] view plain
copy print?
public?class?User?{????????private?int?id;??????private?String?name;??????private?String?password;??????private?Set<Role>?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"?table="t_user_group">?????????????<key?column="userId"></key>?????????????<many-to-many?class="com.shangxuetang.Role"?column="roleId"></many-to-many>??????????</set>??????</class>??</hibernate-mapping>??
需要注意的是:映射文件中屬性table是必須有的;many-to-many 中屬性column是必須有的(中間映射表中,關(guān)聯(lián)目標(biāo)表的關(guān)聯(lián)字段),class是必須有的(關(guān)聯(lián)目標(biāo)類)
[java] view plain
copy print?
public?class?Role?{??????private?int?id;??????private?String?name;??????private?Set<User>?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"?table="t_user_group">??????????????<key?column="roleId"></key>??????????????<many-to-many?class="com.shangxuetang.User"?column="userId"></many-to-many>??????????</set>??????</class>??</hibernate-mapping>??
測試示例代碼:
[java] view plain
copy print?
public?void??testManytoMany()?{??????????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("管理員");??????????????session.save(r1);??????????????Role?r2?=?new?Role("普通用戶");??????????????session.save(r2);??????????????Role?r3?=?new?Role("VIP用戶");??????????????session.save(r3);????????????????????????????u1.addRole(r1).addRole(r3);??????????????u2.addRole(r2);????????????????????????????r1.addUser(u2);????????????????????????????session.getTransaction().commit();??????????}catch(Exception?e)?{??????????????e.printStackTrace();??????????????session.getTransaction().rollback();??????????}finally?{??????????????session.close();??????????}??????}??
總結(jié)
以上是生活随笔為你收集整理的Hibernate 关联映射 之 多对多 关联(一)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。