生活随笔
收集整理的這篇文章主要介紹了
hibernate中List一对多映射关系详解
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
場景:一個Team對一個多個Student,其中Team中的studes屬性為List類型
直接上代碼,測試通過的:
Team.java
?
Java代碼
package?com.fgh.hibernate;??import?java.util.ArrayList;??import?java.util.List;????????@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;????????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">????<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>????????????????????<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">????????????????????<id?name="id"?column="id"?type="string">??????????????<generator?class="uuid"></generator>??????????</id>????????????????????<property?name="name"?column="name"?type="string"></property>????????????????????<list?name="students"?table="student_list"?cascade="all">????????????????????????????<key?column="team_id"></key>??????????????<!--?index標簽表示多的一方?對應一的一方的索引位置???????????????????column屬性表示數據庫中存放數據的字段??????????????????index為關鍵字?避免跟關鍵字沖突?使用`index`?或?[index]??????????????-->??????????????<index?column="[index]"?type="string"></index>????????????????????????????<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>????????????????????<!--?建立多對一關聯映射關系?column="team_id"表示team這張表通過該字段???????????????和student表關聯?-->??????????<many-to-one?name="team"?column="team_id"??????????????class="com.fgh.hibernate.Team">??????????</many-to-one>??????</class>??</hibernate-mapping>??
?
根據以上三個配置文件,可以生成對應的數據庫表,代碼如下:
CreateTable.java
?
Java代碼
package?com.fgh.hibernate;??import?org.hibernate.cfg.Configuration;??import?org.hibernate.tool.hbm2ddl.SchemaExport;????????public?class?CreateTable?{??????public?static?void?main(String[]?args)?{??????????SchemaExport?export?=?new?SchemaExport(new?Configuration().configure());??????????????????????????????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,表已經創建成功,下面測試保存操作:
InsertTest.java
?
Java代碼
package?com.fgh.hibernate;??import?org.hibernate.Session;??import?org.hibernate.SessionFactory;??import?org.hibernate.Transaction;??import?org.hibernate.cfg.Configuration;????????public?class?InsertTest?{??????private?static?SessionFactory?sessionFactory;????????????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?{????????????????????????????Team?team?=?new?Team();??????????????team.setName("team1");??????????????Team?team2?=?new?Team();??????????????team2.setName("team2");????????????????????????????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);??????????????????????????????????????????team.getStudents().add(student);??????????????team.getStudents().add(student2);????????????????????????????team2.getStudents().add(student3);??????????????team2.getStudents().add(student4);??????????????team2.getStudents().add(student5);????????????????????????????tx?=?session.beginTransaction();??????????????????????????????????????????session.save(team);??????????????session.save(team2);??????????????System.out.println("save?success!");??????????????????????????????????????????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?
總結
以上是生活随笔為你收集整理的hibernate中List一对多映射关系详解的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。