Maison > Java > javaDidacticiel > le corps du texte

hibernate_association mapping_one-to-many

巴扎黑
Libérer: 2017-06-23 16:28:30
original
1612 Les gens l'ont consulté

relation de cartographie d'hibernation

un à plusieurs, plusieurs à un, Un-à-un, plusieurs-à-plusieurs.

Les plus couramment utilisés sont un à plusieurs et plusieurs à un.

Dans la base de données, vous pouvez exprimer une relation un-à-plusieurs en ajoutant des associations de clés primaires et étrangères En veille prolongée, une partie en détient plusieurs ; Définir l'implémentation, c'est-à-dire utiliser l'élément à l'extrémité "un" pour représenter l'objet contenant l'extrémité "plusieurs".

Ce qui suit implémente une démo "un-à-plusieurs" d'ajout, de suppression, de modification et de requête : une classe correspond à plusieurs étudiants.

Créez d'abord la classe d'élève Étudiant

 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 }
Copier après la connexion
Afficher le code

Créer une note de classe

 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 }
Copier après la connexion
Afficher le code

Créer le fichier de mappage Student.hbm.xml de la classe Student

 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>
Copier après la connexion
Afficher le code

Créer le fichier de mappage Grade.hbm.xml de la classe Grade

 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>
Copier après la connexion
Afficher le code

Créer un fichier de configuration de mise en veille prolongée

 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&amp;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>
Copier après la connexion
Afficher le code

Écrire un fichier de test pour ajouter, supprimer, modifier et vérifier

 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 }
Copier après la connexion
Afficher le code


Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!