<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    溫故知新:hibernate_06_表關聯_多對一雙向關聯

    和多對一單向關聯類似,但是雙向關聯需要在關聯的兩方都添加配置。實體類和配置文件如下,還是以老師和學生為例。
    Student
     1 package domain;
     2 
     3 
     4 public class Student {
     5     
     6     private int id;
     7     private String name;
     8     private String grade;
     9     
    10     private Teacher teacher;
    11     
    12     //get/set和構造省略,但實際不可省
    13     
    14 }
    15 

     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 
     5 <hibernate-mapping>
     6     <class name="domain.Student" table="STUDENT">
     7         <id name="id" type="int">
     8             <column name="ID" />
     9             <generator class="native" />
    10         </id>
    11         <property name="name" type="java.lang.String">
    12             <column name="NAME" />
    13         </property>
    14         <property name="grade" type="java.lang.String">
    15             <column name="GRADE" />
    16         </property>
    17         <many-to-one name="teacher" class="domain.Teacher" fetch="join">
    18             <!-- 指定對方的外鍵 -->
    19             <column name="tid" />
    20         </many-to-one>
    21     </class>
    22 </hibernate-mapping>
    23 

    Teacher
     1 package domain;
     2 
     3 import java.util.HashSet;
     4 import java.util.Set;
     5 
     6 public class Teacher {
     7     
     8     private int id;
     9     private String name;
    10     private String course;
    11     
    12     private Set<Student> students;
    13     
    14      //get/set和構造省略,但實際不可省
    15 
    16 }
    17 

     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 
     5 <hibernate-mapping>
     6     <class name="domain.Teacher" table="TEACHER">
     7         <id name="id" type="int">
     8             <column name="ID" />
     9             <generator class="native" />
    10         </id>
    11         <property name="name" type="java.lang.String">
    12             <column name="NAME" />
    13         </property>
    14         <property name="course" type="java.lang.String">
    15             <column name="COURSE" />
    16         </property>
    17         <!-- lazy extra會增強查詢的功能,根據查詢的內容選擇查詢語句,比如查詢集合的數量會使用select count(*) -->
    18         <!-- inverse true表示由對方來維護關聯關系,也就是說,在學生對象設置老師屬性并保存之后,二者的關系會建立,教師不負責維護關系 -->
    19         <set name="students" lazy="extra" inverse="true">
    20             <key>
    21                 <!-- 指定需要關聯的外鍵,應和Student的設置一致 -->
    22                 <column name="tid" />
    23             </key>
    24             <one-to-many class="domain.Student"/>
    25         </set> 
    26     </class>
    27 </hibernate-mapping>
    28 
    書寫測試類
     1 package demo;
     2 
     3 import org.hibernate.Session;
     4 import org.junit.Test;
     5 
     6 import domain.Student;
     7 import domain.Teacher;
     8 import util.HibernateUtil;
     9 
    10 
    11 public class App 
    12 {
    13     @Test
    14     /**
    15      * oneToMany雙向關聯,設置多的一方維護關系。最佳實踐就是:先添加一的一方,之后再添加多的一方
    16      * 這樣不會造成冗余的sql
    17      */
    18     public void addTest() {
    19         Session session = null;
    20         try {
    21             session = HibernateUtil.openSession();
    22             session.beginTransaction();
    23 
    24             //添加一的一方
    25             Teacher teacher = new Teacher();
    26             teacher.setName("張老師");
    27             teacher.setCourse("物理");
    28             session.save(teacher);
    29             
    30             //添加多的一方,設置一的一方,因為多的一方需要維護關系
    31             Student stu1 = new Student();
    32             stu1.setName("小明");
    33             stu1.setGrade("一");
    34             stu1.setTeacher(teacher);
    35             session.save(stu1);
    36             
    37             Student stu2 = new Student();
    38             stu2.setName("小紅");
    39             stu2.setGrade("二");
    40             stu2.setTeacher(teacher);
    41             session.save(stu2);
    42             
    43             session.getTransaction().commit();
    44             
    45         } catch (Exception e) {
    46             if (session != null) {
    47                 session.getTransaction().rollback();
    48             }
    49         } finally{
    50             if (session != null) {
    51                 session.close();
    52             }
    53         }
    54     }
    55 }
    56 

    posted on 2015-01-20 19:38 都較瘦 閱讀(91) 評論(0)  編輯  收藏 所屬分類: ORMFramework

    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    導航

    統計

    公告

    博客定位:囿于目前的水平,博客定位在記錄自己的學習心得和隨手的練習

    常用鏈接

    留言簿

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲AV综合永久无码精品天堂| 伊人婷婷综合缴情亚洲五月| 亚洲精品无码久久久| 亚洲成年网站在线观看| 国产无遮挡无码视频免费软件| 亚洲精品A在线观看| 久久国产免费一区| 亚洲尹人九九大色香蕉网站| 永久免费av无码网站yy| 亚洲va久久久噜噜噜久久狠狠| 最新亚洲成av人免费看| 亚洲中文字幕日产乱码高清app| 8x网站免费入口在线观看| 亚洲国产精品国自产电影| 久久午夜夜伦鲁鲁片免费无码| 亚洲中文无码永久免| 永久免费看bbb| 亚洲国产成人手机在线观看| 亚洲熟妇av一区二区三区漫画| 国产A∨免费精品视频| av在线亚洲欧洲日产一区二区| 国产成人无码免费看片软件| 亚洲av无码片区一区二区三区| 最近中文字幕无吗高清免费视频| 国产精品亚洲精品| 国产又大又粗又硬又长免费| 精品在线视频免费| 亚洲AV无码乱码在线观看| XXX2高清在线观看免费视频| 亚洲国产精品线在线观看| 免费人成视网站在线观看不卡| 黄色一级毛片免费| 国产成人无码综合亚洲日韩| 最近免费中文字幕mv在线电影| 一区二区免费在线观看| 国产AV无码专区亚洲Av| 免费看国产一级特黄aa大片| 真人做人试看60分钟免费视频| 亚洲人成网站免费播放| 高清在线亚洲精品国产二区| 你是我的城池营垒免费看|