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 }
Atas ialah kandungan terperinci hibernate_关联映射_一对多. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Penjelasan terperinci tentang konfigurasi pertanyaan satu-ke-banyak MyBatis: Untuk menyelesaikan masalah pertanyaan biasa yang berkaitan, contoh kod khusus diperlukan Dalam kerja pembangunan sebenar, kita sering menghadapi situasi di mana kita perlu menanyakan objek entiti utama dan objek entiti hamba berbilang yang berkaitan. . Dalam MyBatis, pertanyaan satu-ke-banyak ialah pertanyaan perkaitan pangkalan data biasa Dengan konfigurasi yang betul, pertanyaan, paparan dan pengendalian objek yang berkaitan boleh direalisasikan dengan mudah. Artikel ini akan memperkenalkan kaedah konfigurasi pertanyaan satu-ke-banyak dalam MyBatis, dan cara menyelesaikan beberapa masalah pertanyaan biasa yang berkaitan

Mengintegrasikan Hibernate dalam SpringBoot Project Preface Hibernate ialah rangka kerja ORM (Object Relational Mapping) yang popular yang boleh memetakan objek Java ke jadual pangkalan data untuk memudahkan operasi kegigihan. Dalam projek SpringBoot, menyepadukan Hibernate boleh membantu kami melaksanakan operasi pangkalan data dengan lebih mudah Artikel ini akan memperkenalkan cara untuk menyepadukan Hibernate dalam projek SpringBoot dan memberikan contoh yang sepadan. 1.Perkenalkan dependenciesPerkenalkan dependencies berikut dalam fail pom.xml: org.springframework.bootspring-boot-starter-data-jpam

Apa itu JPA? Bagaimanakah ia berbeza daripada JDBC? JPA (JavaPersistence API) ialah antara muka standard untuk pemetaan hubungan objek (ORM), yang membenarkan pembangun Java menggunakan objek Java biasa untuk mengendalikan pangkalan data tanpa menulis pertanyaan SQL secara langsung terhadap pangkalan data. JDBC (JavaDatabaseConnectivity) ialah API standard Java untuk menyambung ke pangkalan data Ia memerlukan pembangun menggunakan pernyataan SQL untuk mengendalikan pangkalan data. JPA merangkum JDBC, menyediakan API yang lebih mudah dan tahap lebih tinggi untuk pemetaan hubungan objek, dan memudahkan operasi capaian data. Dalam JPA, apakah entiti? entiti

Java ialah bahasa pengaturcaraan berorientasikan objek yang digunakan secara meluas dalam bidang pembangunan perisian. Hibernate ialah rangka kerja kegigihan Java yang popular yang menyediakan cara yang mudah dan cekap untuk mengurus kegigihan objek Java. Walau bagaimanapun, ralat Hibernate sering ditemui semasa proses pembangunan, dan ralat ini boleh menyebabkan atur cara ditamatkan secara tidak normal atau menjadi tidak stabil. Cara mengendalikan dan mengelakkan ralat Hibernate telah menjadi kemahiran yang mesti dikuasai oleh pembangun Java. Artikel ini akan memperkenalkan beberapa Hib biasa

Bagaimana untuk mengaitkan kunci asing MySQL dan kunci utama secara automatik? Dalam pangkalan data MySQL, kunci asing dan kunci utama adalah konsep yang sangat penting. Ia boleh membantu kami mewujudkan hubungan antara jadual yang berbeza dan memastikan integriti dan konsistensi data. Dalam proses aplikasi sebenar, selalunya perlu untuk mengaitkan kunci asing secara automatik kepada kunci utama yang sepadan untuk mengelakkan ketidakkonsistenan data. Berikut akan memperkenalkan cara melaksanakan fungsi ini melalui contoh kod tertentu. Pertama, kita perlu mencipta dua jadual, satu sebagai jadual induk dan satu lagi sebagai jadual hamba. Buat dalam jadual utama

Perbezaan antara hibernate dan mybatis: 1. Kaedah pelaksanaan 2. Prestasi 3. Perbandingan pengurusan objek; Pengenalan terperinci: 1. Kaedah pelaksanaan, Hibernate ialah penyelesaian pemetaan objek/hubungan yang lengkap yang memetakan objek ke jadual pangkalan data, manakala MyBatis memerlukan pembangun menulis pernyataan SQL dan ResultMap secara manual 2. Prestasi, Hibernate adalah mungkin dari segi kelajuan pembangunan Lebih cepat daripada MyBatis kerana Hibernate memudahkan lapisan DAO dan sebagainya.

Hibernate satu-ke-banyak dan banyak-ke-banyak Hibernate ialah rangka kerja ORM yang sangat baik yang memudahkan akses data antara aplikasi Java dan pangkalan data hubungan. Dalam Hibernate, kita boleh menggunakan perhubungan satu-ke-banyak dan banyak-ke-banyak untuk mengendalikan model data yang kompleks. Satu-ke-banyak Hibernate Dalam Hibernate, hubungan satu-dengan-banyak bermakna satu kelas entiti sepadan dengan berbilang kelas entiti lain. Sebagai contoh, pesanan boleh sepadan dengan berbilang item pesanan (OrderItem), dan pengguna (Pengguna) boleh sepadan dengan berbilang pesanan (Pesanan). Untuk melaksanakan perhubungan satu-ke-banyak dalam Hibernate, anda perlu menentukan atribut koleksi dalam kelas entiti untuk disimpan

Pengkompil "C" menilai ungkapan mengikut keutamaan dan peraturan persekutuan. Jika ungkapan mengandungi pengendali keutamaan yang berbeza, peraturan keutamaan diambil kira. Di sini, 10*2 dinilai terlebih dahulu kerana '*' mempunyai keutamaan yang lebih tinggi daripada '-' dan '=' Jika ungkapan mengandungi keutamaan yang sama, peraturan persekutuan dipertimbangkan, iaitu dari kiri ke kanan (atau dari kanan ke kiri. ).
