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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

hibernate中List一对多映射关系详解

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

場景:一個Team對一個多個Student,其中Team中的studes屬性為List類型

直接上代碼,測試通過的:

Team.java

?

Java代碼
  • package?com.fgh.hibernate;??
  • import?java.util.ArrayList;??
  • import?java.util.List;??
  • /**?
  • ?*?一的一方?
  • ?*?@author?fgh?
  • ?*?
  • ?*/??
  • @SuppressWarnings("unchecked")??
  • public?class?Team?{??
  • ????private?String?id;??
  • ????private?String?name;??
  • ????private?List?students?=?new?ArrayList();??
  • ????public?String?getId()?{??
  • ????????return?id;??
  • ????}??
  • ????public?void?setId(String?id)?{??
  • ????????this.id?=?id;??
  • ????}??
  • ????public?String?getName()?{??
  • ????????return?name;??
  • ????}??
  • ????public?void?setName(String?name)?{??
  • ????????this.name?=?name;??
  • ????}??
  • ????public?List?getStudents()?{??
  • ????????return?students;??
  • ????}??
  • ????public?void?setStudents(List?students)?{??
  • ????????this.students?=?students;??
  • ????}??
  • }??

  • Studeng.java

    ?

    Java代碼
  • package?com.fgh.hibernate;??
  • /**?
  • ?*?多的一方?
  • ?*?@author?fgh?
  • ?*?
  • ?*/??
  • public?class?Student?{??
  • ????private?String?id;??
  • ????private?String?cardId;??
  • ????private?String?name;??
  • ????private?int?age;??
  • ????private?Team?team;??
  • ????public?String?getId()?{??
  • ????????return?id;??
  • ????}??
  • ????public?void?setId(String?id)?{??
  • ????????this.id?=?id;??
  • ????}??
  • ????public?String?getCardId()?{??
  • ????????return?cardId;??
  • ????}??
  • ????public?void?setCardId(String?cardId)?{??
  • ????????this.cardId?=?cardId;??
  • ????}??
  • ????public?String?getName()?{??
  • ????????return?name;??
  • ????}??
  • ????public?void?setName(String?name)?{??
  • ????????this.name?=?name;??
  • ????}??
  • ????public?int?getAge()?{??
  • ????????return?age;??
  • ????}??
  • ????public?void?setAge(int?age)?{??
  • ????????this.age?=?age;??
  • ????}??
  • ????public?Team?getTeam()?{??
  • ????????return?team;??
  • ????}??
  • ????public?void?setTeam(Team?team)?{??
  • ????????this.team?=?team;??
  • ????}??
  • }??

  • 以下三個配置文件均放在src根目錄下:

    hibernate主配置文件:

    hibernate.cfg.xml

    ?

    Html代碼
  • <?xml?version='1.0'?encoding='UTF-8'?>??
  • <!DOCTYPE?hibernate-configuration?PUBLIC??
  • ??????????"-//Hibernate/Hibernate?Configuration?DTD?3.0//EN"??
  • ??????????"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">??
  • <!--?Generated?by?MyEclipse?Hibernate?Tools.???????????????????-->??
  • <hibernate-configuration>??
  • ????<session-factory>??
  • ????????<property?name="connection.url">??
  • ????????????jdbc:mysql://localhost:3306/hibernate??
  • ????????</property>??
  • ????????<property?name="connection.username">root</property>??
  • ????????<property?name="connection.password">root</property>??
  • ????????<property?name="connection.driver_class">??
  • ????????????com.mysql.jdbc.Driver??
  • ????????</property>??
  • ????????<property?name="dialect">??
  • ????????????org.hibernate.dialect.MySQLDialect??
  • ????????</property>??
  • ????????<property?name="show_sql">true</property>??
  • ????????<!--?引入兩個相關(guān)配置文件?-->??
  • ????????<mapping?resource="Team.hbm.xml"?/>??
  • ????????<mapping?resource="Student.hbm.xml"?/>??
  • ????</session-factory>??
  • </hibernate-configuration>??

  • 一方配置文件: Team.hbm.xml

    ?

    ?

    Html代碼
  • <?xml?version="1.0"?>??
  • <!DOCTYPE?hibernate-mapping?PUBLIC??
  • ????????"-//Hibernate/Hibernate?Mapping?DTD?3.0//EN"??
  • ????????"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">??
  • <hibernate-mapping>??
  • ????<class?name="com.fgh.hibernate.Team"?table="team_list">??
  • ????????<!--?采用uuid生成主鍵?這里要指定type為string類型?-->??
  • ????????<id?name="id"?column="id"?type="string">??
  • ????????????<generator?class="uuid"></generator>??
  • ????????</id>??
  • ????????<!--?像類似這樣的name屬性?都是指類里面的成員變量?column指數(shù)據(jù)庫中對應的字段名-->??
  • ????????<property?name="name"?column="name"?type="string"></property>??
  • ????????<!--?設(shè)置級聯(lián)為?cascade="all"-->??
  • ????????<list?name="students"?table="student_list"?cascade="all">??
  • ????????????<!--?維護對方的外鍵?-->??
  • ????????????<key?column="team_id"></key>??
  • ????????????<!--?index標簽表示多的一方?對應一的一方的索引位置???
  • ????????????????column屬性表示數(shù)據(jù)庫中存放數(shù)據(jù)的字段??
  • ????????????????index為關(guān)鍵字?避免跟關(guān)鍵字沖突?使用`index`?或?[index]??
  • ????????????-->??
  • ????????????<index?column="[index]"?type="string"></index>??
  • ????????????<!--?建立一對多的關(guān)聯(lián)?-->??
  • ????????????<one-to-many?class="com.fgh.hibernate.Student"?/>??
  • ????????</list>??
  • ????</class>??
  • </hibernate-mapping>??

  • 多方配置文件 : Studeng.hbm.xml

    ?

    Html代碼
  • <?xml?version="1.0"?>??
  • <!DOCTYPE?hibernate-mapping?PUBLIC??
  • ????????"-//Hibernate/Hibernate?Mapping?DTD?3.0//EN"??
  • ????????"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">??
  • <hibernate-mapping>??
  • ????<class?name="com.fgh.hibernate.Student"?table="student_list">??
  • ????????<id?name="id"?column="id"?type="string">??
  • ????????????<generator?class="uuid"></generator>??
  • ????????</id>??
  • ????????<property?name="cardId"?column="card_id"?type="string"></property>??
  • ????????<property?name="name"?column="name"?type="string"></property>??
  • ????????<property?name="age"?column="age"?type="int"></property>??
  • ????????<!--?因為list中的value?不是原始類型?所以要指定其類型?-->??
  • ????????<!--?建立多對一關(guān)聯(lián)映射關(guān)系?column="team_id"表示team這張表通過該字段??
  • ?????????????和student表關(guān)聯(lián)?-->??
  • ????????<many-to-one?name="team"?column="team_id"??
  • ????????????class="com.fgh.hibernate.Team">??
  • ????????</many-to-one>??
  • ????</class>??
  • </hibernate-mapping>??
  • ?

    根據(jù)以上三個配置文件,可以生成對應的數(shù)據(jù)庫表,代碼如下:

    CreateTable.java

    ?

    Java代碼
  • package?com.fgh.hibernate;??
  • import?org.hibernate.cfg.Configuration;??
  • import?org.hibernate.tool.hbm2ddl.SchemaExport;??
  • /**?
  • ?*?根據(jù).hbm.xml配置文件創(chuàng)建相應的數(shù)據(jù)庫表?
  • ?*?@author?fgh?
  • ?*?
  • ?*/??
  • public?class?CreateTable?{??
  • ????public?static?void?main(String[]?args)?{??
  • ????????SchemaExport?export?=?new?SchemaExport(new?Configuration().configure());??
  • ????????//?第一個參數(shù)表示是否在控制臺打印出DDL語句(print?the?DDL?to?the?console)??
  • ????????//?第二個參數(shù)表示是否將腳本輸出到數(shù)據(jù)庫(export?the?script?to?the?database)??
  • ????????export.create(true,?true);??
  • ????}??
  • }??
  • ?

    ?

    運行CreateTable.java 生成對應表,后臺打印sql如下:

    ?

    Sql代碼
  • alter?table?student_list?drop?foreign?key?FKFEDE142211CB0B6A??
  • drop?table?if?exists?student_list??
  • drop?table?if?exists?team_list??
  • create?table?student_list?(id?varchar(255)?not?null,?card_id?varchar(255),?name?varchar(255),?age?integer,?team_id?varchar(255),?`index`?integer,?primary?key?(id))??
  • create?table?team_list?(id?varchar(255)?not?null,?name?varchar(255),?primary?key?(id))??
  • alter?table?student_list?add?index?FKFEDE142211CB0B6A?(team_id),?add?constraint?FKFEDE142211CB0B6A?foreign?key?(team_id)?references?team_list?(id)??
  • ?

    ok,表已經(jīng)創(chuàng)建成功,下面測試保存操作:

    InsertTest.java

    ?

    Java代碼
  • package?com.fgh.hibernate;??
  • import?org.hibernate.Session;??
  • import?org.hibernate.SessionFactory;??
  • import?org.hibernate.Transaction;??
  • import?org.hibernate.cfg.Configuration;??
  • /**?
  • ?*?保存操作測試類?
  • ?*?@author?fgh?
  • ?*?
  • ?*/??
  • public?class?InsertTest?{??
  • ????private?static?SessionFactory?sessionFactory;??
  • ????//創(chuàng)建工廠實例??
  • ????static?{??
  • ????????try?{??
  • ????????????sessionFactory?=?new?Configuration().configure()??
  • ????????????????????.buildSessionFactory();??
  • ????????}?catch?(Exception?e)?{??
  • ????????????e.printStackTrace();??
  • ????????}??
  • ????}??
  • ????@SuppressWarnings("unchecked")??
  • ????public?static?void?main(String[]?args)?{??
  • ????????Session?session?=?sessionFactory.openSession();??
  • ????????Transaction?tx?=?null;??
  • ????????try?{??
  • ????????????//創(chuàng)建兩個team??
  • ????????????Team?team?=?new?Team();??
  • ????????????team.setName("team1");??
  • ????????????Team?team2?=?new?Team();??
  • ????????????team2.setName("team2");??
  • ????????????//創(chuàng)建6個student對象??
  • ????????????Student?student?=?new?Student();??
  • ????????????student.setAge(20);??
  • ????????????student.setName("zhangsan");??
  • ????????????student.setTeam(team);??
  • ????????????Student?student2?=?new?Student();??
  • ????????????student2.setAge(24);??
  • ????????????student2.setName("lisi");??
  • ????????????student2.setTeam(team);??
  • ????????????Student?student3?=?new?Student();??
  • ????????????student3.setAge(24);??
  • ????????????student3.setName("student3");??
  • ????????????student3.setTeam(team2);??
  • ????????????Student?student4?=?new?Student();??
  • ????????????student4.setAge(24);??
  • ????????????student4.setName("student4");??
  • ????????????student4.setTeam(team2);??
  • ????????????Student?student5?=?new?Student();??
  • ????????????student5.setAge(24);??
  • ????????????student5.setName("student5");??
  • ????????????student5.setTeam(team2);??
  • ??????????????
  • ????????????//前兩個student屬于team??
  • ????????????team.getStudents().add(student);??
  • ????????????team.getStudents().add(student2);??
  • ????????????//后三個student屬于team2??
  • ????????????team2.getStudents().add(student3);??
  • ????????????team2.getStudents().add(student4);??
  • ????????????team2.getStudents().add(student5);??
  • ????????????//開啟事務(wù)??
  • ????????????tx?=?session.beginTransaction();??
  • ??????????????
  • ????????????//保存team和team2??
  • ????????????session.save(team);??
  • ????????????session.save(team2);??
  • ????????????System.out.println("save?success!");??
  • ??????????????
  • ????????????//提交事務(wù)??
  • ????????????tx.commit();??
  • ????????}?catch?(Exception?e)?{??
  • ????????????e.printStackTrace();??
  • ????????????if?(null?!=?tx)?{??
  • ????????????????tx.rollback();??
  • ????????????}??
  • ????????}?finally?{??
  • ????????????session.close();??
  • ????????}??
  • ????}??
  • }??
  • 控制打印sql如下:

    ?

    Sql代碼
  • save?success!??
  • Hibernate:?insert?into?team_list?(name,?id)?values?(?,??)??
  • Hibernate:?insert?into?student_list?(card_id,?name,?age,?team_id,?id)?values?(?,??,??,??,??)??
  • Hibernate:?insert?into?student_list?(card_id,?name,?age,?team_id,?id)?values?(?,??,??,??,??)??
  • Hibernate:?insert?into?team_list?(name,?id)?values?(?,??)??
  • Hibernate:?insert?into?student_list?(card_id,?name,?age,?team_id,?id)?values?(?,??,??,??,??)??
  • Hibernate:?insert?into?student_list?(card_id,?name,?age,?team_id,?id)?values?(?,??,??,??,??)??
  • Hibernate:?insert?into?student_list?(card_id,?name,?age,?team_id,?id)?values?(?,??,??,??,??)??
  • Hibernate:?update?student_list?set?team_id=?,?`index`=??where?id=???
  • Hibernate:?update?student_list?set?team_id=?,?`index`=??where?id=???
  • Hibernate:?update?student_list?set?team_id=?,?`index`=??where?id=???
  • Hibernate:?update?student_list?set?team_id=?,?`index`=??where?id=???
  • Hibernate:?update?student_list?set?team_id=?,?`index`=??where?id=???

  • 02-04插入的是team
    05-08插入的是team2

    09-13是對student_list表中外鍵team_id,和排序字段index的維護

    ?

    student_list表中記錄如下:

    ?

    Sql代碼
  • id????????????????????name????age???????????team_id??
  • Sql代碼
  • 8a8adb7b34a45b700134a45b72130002?zhangsan??20??8a8adb7b34a45b700134a45b71fc00010??
  • 8a8adb7b34a45b700134a45b72130003?lisi??????24??8a8adb7b34a45b700134a45b71fc00011??
  • 8a8adb7b34a45b700134a45b72130005?student3??24??8a8adb7b34a45b700134a45b721300040??
  • 8a8adb7b34a45b700134a45b72130006?student4??24??8a8adb7b34a45b700134a45b721300041??
  • 8a8adb7b34a45b700134a45b72140007?student5??24??8a8adb7b34a45b700134a45b721300042??

  • team_list表中記錄:

    Sql代碼
  • 8a8adb7b34a467320134a46733cc0001????team1??
  • 8a8adb7b34a467320134a46733e40004????team2?
  • 總結(jié)

    以上是生活随笔為你收集整理的hibernate中List一对多映射关系详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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