#一對一、多對一、一對一、多對多。
常用的是一對多和多對一。
在資料庫中可以透過加入主外鍵的關聯,表現一對多的關係;在hibernate中透過在一方持有多方的集合實現,即在「一」的一端中使用
在下面實作一個增刪改查的「一對多」demo:一個班級對應多個學生。
先建立學生類別Student


1 package com.imooc.entity; 2 3 import java.io.Serializable; 4 5 public class Student implements Serializable { 6 7 private int sid; 8 private String sname; 9 private String sex;10 // 在多方定义一个一方的引用11 private Grade grade;12 13 public int getSid() {14 return sid;15 }16 public void setSid(int sid) {17 this.sid = sid;18 }19 public String getSname() {20 return sname;21 }22 public void setSname(String sname) {23 this.sname = sname;24 }25 public String getSex() {26 return sex;27 }28 public void setSex(String sex) {29 this.sex = sex;30 }31 public Grade getGrade() {32 return grade;33 }34 public void setGrade(Grade grade) {35 this.grade = grade;36 }37 38 public Student() {39 super();40 }41 42 public Student(String sname, String sex) {43 super();44 this.sname = sname;45 this.sex = sex;46 }47 48 }
#建立班級類別Grade


1 package com.imooc.entity; 2 3 import java.io.Serializable; 4 import java.util.HashSet; 5 import java.util.Set; 6 7 8 public class Grade implements Serializable { 9 10 private int gid;11 private String gname;12 private String gdesc;13 private Set<student> students = new HashSet<student>();14 15 public int getGid() {16 return gid;17 }18 public void setGid(int gid) {19 this.gid = gid;20 }21 public String getGname() {22 return gname;23 }24 public void setGname(String gname) {25 this.gname = gname;26 }27 public String getGdesc() {28 return gdesc;29 }30 public void setGdesc(String gdesc) {31 this.gdesc = gdesc;32 }33 public Set<student> getStudents() {34 return students;35 }36 public void setStudents(Set<student> students) {37 this.students = students;38 }39 40 public Grade() {41 super();42 }43 44 public Grade(int gid, String gname, String gdesc) {45 super();46 this.gid = gid;47 this.gname = gname;48 this.gdesc = gdesc;49 }50 51 public Grade(String gname, String gdesc) {52 super();53 this.gname = gname;54 this.gdesc = gdesc;55 }56 }</student></student></student></student>
#建立Student類別的對應檔案Student.hbm.xml


1 <?xml version="1.0"?> 2 nbsp;hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 3 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 4 <!-- Generated 2017-6-1 14:49:09 by Hibernate Tools 3.5.0.Final --> 5 <hibernate-mapping> 6 <class> 7 <id> 8 <column></column> 9 <generator></generator>10 </id>11 <property>12 <column></column>13 </property>14 <property>15 <column></column>16 </property>17 </class>18 </hibernate-mapping>
#建立Grade類別的映射檔Grade.hbm.xml






1 <?xml version="1.0"?> 2 nbsp;hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 3 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 4 <!-- Generated 2017-6-1 14:49:09 by Hibernate Tools 3.5.0.Final --> 5 <hibernate-mapping> 6 <class> 7 <id> 8 <column></column> 9 <generator></generator>10 </id>11 <property>12 <column></column>13 </property>14 <property>15 <column></column>16 </property>17 <!-- 指定关联的外键列 -->18 <set>19 <key>20 <column></column>21 </key>22 <one-to-many></one-to-many>23 </set>24 </class>25 </hibernate-mapping>
#建立hibernate的設定檔
1 <?xml version="1.0" encoding="UTF-8"?> 2 nbsp;hibernate-configuration PUBLIC 3 "-//Hibernate/Hibernate Configuration DTD 3.0//EN" 4 "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> 5 <hibernate-configuration> 6 <session-factory> 7 <property>root</property> 8 <property>root</property> 9 <property>com.mysql.jdbc.Driver</property>10 <property>11 14 </property>15 <property>org.hibernate.dialect.MySQLDialect</property>16 <property>true</property>17 <property>true</property>18 <property>update</property>19 20 <!-- 指定映射文件的路径 -->21 <mapping></mapping>22 <mapping></mapping>23 </session-factory>24 </hibernate-configuration>######View Code############寫一個增刪改查的測試檔案##################
1 package com.imooc.test; 2 3 import java.util.Set; 4 5 import org.hibernate.Session; 6 import org.hibernate.Transaction; 7 8 import com.imooc.entity.Grade; 9 import com.imooc.entity.Student;10 import com.imooc.util.HibernateUtil;11 12 /*13 * 单向一对多关系关系(班级--->学生)14 * 建立关联关系后,可以方便的从一个对象导航到另一个对象15 * 注意关联的方向16 */17 public class Test01 {18 19 public static void main(String[] args) {20 //add();21 //findStudentsByGrade();22 //update();23 delete();24 }25 26 //将学生添加到班级27 public static void add() {28 Grade g = new Grade("Java一班", "Java软件开发一班");29 Student s1 = new Student("杨康", "男");30 Student s2 = new Student("穆念慈", "女");31 32 //如果希望在学生表中添加对应的班级编号,需要在班级中添加学生,建立关联关系33 g.getStudents().add(s1);34 g.getStudents().add(s2);35 36 Session session = HibernateUtil.getSession();37 Transaction tr = session.beginTransaction();38 session.save(g);39 session.save(s1);40 session.save(s2);41 tr.commit();42 HibernateUtil.closeSession(session);43 }44 45 //查询班级中包含的学生46 public static void findStudentsByGrade() {47 Session session = HibernateUtil.getSession();48 Grade grade = (Grade) session.get(Grade.class, 1);49 System.out.println( grade.getGname() + "," + grade.getGdesc() );50 51 Set<student> students = grade.getStudents();52 for(Student s : students) {53 System.out.println( s.getSname() + "," + s.getSex() );54 }55 }56 57 //修改学生信息58 public static void update() {59 Grade g=new Grade("Java二班", "Java软件开发二班");60 Session session = HibernateUtil.getSession();61 Transaction tr = session.beginTransaction();62 Student s = (Student) session.get(Student.class, 1);63 g.getStudents().add(s);64 session.save(g);65 tr.commit();66 HibernateUtil.closeSession(session);67 }68 69 //删除学生信息70 public static void delete() {71 Session session = HibernateUtil.getSession();72 Transaction tr = session.beginTransaction();73 Student s = (Student) session.get(Student.class, 2);74 session.delete(s);75 tr.commit();76 HibernateUtil.closeSession(session);77 }78 }</student>######View Code################
以上是hibernate_關聯映射_一對多的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本文討論了使用Maven和Gradle進行Java項目管理,構建自動化和依賴性解決方案,以比較其方法和優化策略。

本文使用Maven和Gradle之類的工具討論了具有適當的版本控制和依賴關係管理的自定義Java庫(JAR文件)的創建和使用。

本文討論了使用咖啡因和Guava緩存在Java中實施多層緩存以提高應用程序性能。它涵蓋設置,集成和績效優勢,以及配置和驅逐政策管理最佳PRA

本文討論了使用JPA進行對象相關映射,並具有高級功能,例如緩存和懶惰加載。它涵蓋了設置,實體映射和優化性能的最佳實踐,同時突出潛在的陷阱。[159個字符]

Java的類上載涉及使用帶有引導,擴展程序和應用程序類負載器的分層系統加載,鏈接和初始化類。父代授權模型確保首先加載核心類別,從而影響自定義類LOA


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

Atom編輯器mac版下載
最受歡迎的的開源編輯器

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

Dreamweaver CS6
視覺化網頁開發工具

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),