hibernate_關聯映射_一對多
#一對一、多對一、一對一、多對多。
常用的是一對多和多對一。
在資料庫中可以透過加入主外鍵的關聯,表現一對多的關係;在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.hbm.xml


1 <?xml version="1.0"?> 2 <!DOCTYPE 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 name="com.imooc.entity.Student" table="STUDENT"> 7 <id name="sid" type="int"> 8 <column name="SID" /> 9 <generator class="increment" />10 </id>11 <property name="sname" type="java.lang.String">12 <column name="SNAME" />13 </property>14 <property name="sex" type="java.lang.String">15 <column name="SEX" />16 </property>17 </class>18 </hibernate-mapping>
#建立Grade類別的映射檔Grade.hbm.xml






1 <?xml version="1.0"?> 2 <!DOCTYPE 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 name="com.imooc.entity.Grade" table="GRADE"> 7 <id name="gid" type="int"> 8 <column name="GID" /> 9 <generator class="increment" />10 </id>11 <property name="gname" type="java.lang.String">12 <column name="GNAME" length="20" not-null="true" />13 </property>14 <property name="gdesc" type="java.lang.String">15 <column name="GDESC" />16 </property>17 <!-- 指定关联的外键列 -->18 <set name="students" table="STUDENT">19 <key>20 <column name="GID" />21 </key>22 <one-to-many class="com.imooc.entity.Student" />23 </set>24 </class>25 </hibernate-mapping>
#建立hibernate的設定檔
1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE 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 name="connection.username">root</property> 8 <property name="connection.password">root</property> 9 <property name="connection.driver_class">com.mysql.jdbc.Driver</property>10 <property name="connection.url">11 <![CDATA[12 jdbc:mysql://localhost:3306/hibernate?useUnicode=true&characterEncoding=UTF-813 ]]>14 </property>15 <property name="dialect">org.hibernate.dialect.MySQLDialect</property>16 <property name="show_sql">true</property>17 <property name="format_sql">true</property>18 <property name="hbm2ddl.auto">update</property>19 20 <!-- 指定映射文件的路径 -->21 <mapping resource="com/imooc/entity/Grade.hbm.xml" />22 <mapping resource="com/imooc/entity/Student.hbm.xml" />23 </session-factory>24 </hibernate-configuration>
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 }
以上是hibernate_關聯映射_一對多的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

MyBatis一對多查詢配置詳解:解決常見關聯查詢問題,需要具體程式碼範例在實際的開發工作中,經常會遇到需要查詢主實體物件及其關聯的多個從實體物件的情況。在MyBatis中,一對多查詢是一種常見的資料庫關聯查詢,透過正確的配置,可以輕鬆實現對關聯物件的查詢、展示和操作。本文將介紹MyBatis中一對多查詢的設定方法,以及如何解決一些常見的關聯查詢問題,同時會

在SpringBoot專案中整合Hibernate前言Hibernate是一個流行的ORM(物件關係映射)框架,它可以將Java物件映射到資料庫表,從而方便地進行持久化操作。在SpringBoot專案中,整合Hibernate可以幫助我們更輕鬆地進行資料庫操作,本文將介紹如何在SpringBoot專案中整合Hibernate,並提供相應的範例。 1.引入依賴在pom.xml檔案中引入以下依賴:org.springframework.bootspring-boot-starter-data-jpam

什麼是JPA?它與JDBC有什麼不同? JPA(JavaPersistenceapi)是一個用於物件關係映射(ORM)的標準接口,它允許Java開發者使用熟悉的Java物件來操作資料庫,而無需編寫直接針對資料庫的sql查詢。而JDBC(JavaDatabaseConnectivity)是Java用來連接資料庫的標準API,它需要開發者使用SQL語句來操作資料庫。 JPA將JDBC封裝起來,為物件-關聯映射提供了更方便、更高層級的API,簡化了資料存取操作。在JPA中,什麼是實體(Entity)?實體

Java是一種物件導向程式語言,它被廣泛地應用於軟體開發領域。 Hibernate是一種流行的Java持久化框架,它提供了一種簡單且高效的方式來管理Java物件的持久化。然而,開發過程中經常會遇到Hibernate錯誤,這些錯誤可能會導致程式的異常終止或不穩定。如何處理和避免Hibernate錯誤成為了Java開發者必須掌握的能力。本文將介紹一些常見的Hib

如何讓MySQL外鍵和主鍵自動關聯?在MySQL資料庫中,外鍵和主鍵是非常重要的概念,它們能夠幫助我們在不同表之間建立關聯關係,確保資料的完整性和一致性。在實際的應用過程中,經常需要讓外鍵自動關聯到對應的主鍵上,以避免資料不一致的情況發生。以下將介紹如何透過具體的程式碼範例實現此功能。首先,我們需要建立兩個表,一個表作為主表,另一個表作為從表。在主表中創

hibernate和mybatis的差別:1、實作方式;2、效能;3、物件管理的比較;4、快取機制。詳細介紹:1、實作方式,Hibernate是一個完整的物件/關係映射解決方案,將物件與資料庫表進行映射,MyBatis則需要開發者手動編寫SQL語句以及ResultMap;2、效能,Hibernate在開發速度上可能比MyBatis快,因為Hibernate簡化了DAO層等等。

Hibernate的一對多和多對多Hibernate是一個優秀的ORM框架,它簡化了Java應用程式與關係型資料庫之間的資料存取。在Hibernate中,我們可以使用一對多和多對多的關係來處理複雜的資料模型。 Hibernate的一對多在Hibernate中,一對多關係是指一個實體類別對應多個另一個實體類別。例如,一個訂單(Order)可以對應多個訂單項目(OrderItem),一個使用者(User)可以對應多個訂單(Order)。要在Hibernate中實作一對多關係,需要在實體類別中定義一個集合屬性來存

“C”編譯器根據優先權和關聯性規則對表達式進行求值。如果表達式包含不同優先權運算符,則會考慮優先權規則。這裡,首先評估10*2,因為'*'比'-'和'='具有更高的優先級如果表達式包含相同的優先級,則考慮關聯性規則,即從左到右(或從右到左)。
