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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Hibernate 关联映射 之 多对多 关联(一)

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

1、了解幾個知識點:

一、一般的設計中,多對多關聯映射,需要一個中間表
二、Hibernate會自動生成中間表
三、Hibernate使用many-to-many標簽來表示多對多的關聯
四、多對多的關聯映射,在實體類中,跟一對多一樣,也是用集合來表示的

2、示例代碼(用戶和角色之間的關系是多對多)

用戶的示例代碼:

[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是必須有的(中間映射表中,關聯目標表的關聯字段),class是必須有的(關聯目標類)

    [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();??
  • ????????}??
  • ????}??

  • 總結

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

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