1. 程式人生 > >雙向多對一對映關係

雙向多對一對映關係

兩個實體類

public class Grade implements Serializable {
    private int gid;
    private String gname;
    private String gdesc;
    //在"一"方定義"多"方的集合
    private Set<Student> students=new HashSet<Student>();
private int sid;
    private String sname;
    private String sex;
    private Grade grade;

對映檔案填寫相應的one-to-many,many-to-one

<!-- 配置一對多關聯關係 -->
  <set  name="students" table="student" inverse="true"          cascade="all">
          <key column="gid"></key>
          <!-- 指定對應實體類 -->
          <one-to-many class="hibernatehand.entity.Student" />
 </set
>
 <!-- 配置多對一關聯關係-->
<many-to-one name="grade"  column="gid" class="hibernatehand.entity.Grade"    cascade="all"/>

測試類也需要配置相應關聯關係

    public static void add(){
    Grade g2=new Grade("2班", "JAVA軟體開發2班");
        Grade g=new Grade("JAVA一班", "JAVA軟體開發一班");
        Student s1=new Student("張1"
, "男"); Student s2=new Student("張2", "女"); Student s3=new Student("張3", "女"); //配置雙方關聯關係 s1.setGrade(g); s2.setGrade(g); s3.setGrade(g2); g.getStudents().add(s2); g.getStudents().add(s2); g2.getStudents().add(s3); Session session=HibernatehandUtil5.getSession(); Transaction ts=session.beginTransaction(); session.save(g); session.save(g2); ts.commit(); HibernatehandUtil5.closeSession(session); }

這樣雙向關聯關係就完成了
cascade=”all” 級聯操作 在儲存班級的同時也儲存的班級裡的學生
inverse=”true”通常在”一”方設定為true這樣關聯關係由多方維護
好處如下:

執行add方法

//inverse="false"
Hibernate: select max(gid) from grade
Hibernate: select max(sid) from student
Hibernate: insert into cart.grade (gname, gdesc, gid) values (?, ?, ?)
Hibernate: insert into cart.student (sname, sex, gid, sid) values (?, ?, ?, ?)
Hibernate: insert into cart.grade (gname, gdesc, gid) values (?, ?, ?)
Hibernate: insert into cart.student (sname, sex, gid, sid) values (?, ?, ?, ?)
Hibernate: update cart.student set gid=? where sid=?
Hibernate: update cart.student set gid=? where sid=?
//inverse="true"
Hibernate: select max(gid) from grade
Hibernate: select max(sid) from student
Hibernate: insert into cart.grade (gname, gdesc, gid) values (?, ?, ?)
Hibernate: insert into cart.student (sname, sex, gid, sid) values (?, ?, ?, ?)
Hibernate: insert into cart.grade (gname, gdesc, gid) values (?, ?, ?)
Hibernate: insert into cart.student (sname, sex, gid, sid) values (?, ?, ?, ?)

少執行了兩條update 語句但是結果相同; 因為是根據關聯關係把學生和班級都存進資料庫;所以update去更新學生表裡的學生-班級的關係毫無必要

相關推薦

雙向對映關係

兩個實體類 public class Grade implements Serializable { private int gid; private String gname; private String gdesc; //

JPA:對映單向關聯關係

1.單向多對一是jpa中常用的關聯關係,這裡以訂單和顧客舉例子(多個訂單可以對應同一顧客) 2.顧客實體類程式碼如下: package com.wayne.helloworld; import java.util.Date; import javax.persistence.Colu

Hibernate對映關聯關係

多對一的單向關聯 表於表的關聯可以分為一對一,一對多,多對一和多對多 例如在網路商城中,一個大的商品分類下,有多個小的商品分類,一個小的商品分類下,有多個商品 多對一的單向關聯 例如 tab <many-to-one name="category" cla

Hibernate(六)實現一對對映關聯關係

一對多、多對一這種關係在現實生活中很多,例如部門與員工的關係,學校裡班級與學生的關係... 那麼在具體的系統實現中如果i實現這種關聯關係呢?這裡以部門和員工的關係為例。 部門實體類 package test.hibernate.hbmOneToMany; import

個人Hibernate筆記:兩張表對映以後,如何查出表裡面的資料?

專案有兩張表:應用型別表1,應用表2,兩張表已經用Hibernate映射了,之前都是通過型別Id相對應的應用Id,現在要通過應用Id來查詢與之對應的型別Id,如何做呢? 由於之前一直沒有用過這樣的查詢方式,自己胡亂鼓搗以後,終於得出了方法,如下: <% for (int y =

MyBatis中對映時,執行sql語句的寫法

情境再現: 在使用MyBatis來進行多對一對映時,出現了sql語句中某個屬性為空的現象 <!-- 增加 地址資訊--> <insert id="insertAddress" par

Hibernate:單項雙向

單項多對一 封裝類: Dept.java: public class Dept {     private Byte deptNo;     private String deptName;

MyBatis 一對關係

package com.mingde.dao; import java.util.List; import org.apache.ibatis.annotations.One; import org.apache.ibatis.annotations.Result; import org.apache.i

SSH學習四 Hibernate關係 + 增刪改查

多對一關係實現起來不難,只需要在“多”的一方宣告外來鍵,宣告外來鍵在類的對映檔案實現。 下面以老師學生為例,老師是1,學生是多 有一個有趣的地方,在Student類裡面,沒有宣告teacherid這個屬性,但是隻要在配置檔案聲明瞭外來鍵,那麼就算類裡面沒有外來鍵,配置檔案

hibernate對映時用set,bag,list,array時有什麼區別?

簡單的說,這些集合類除了bag,都有其對應的JDK中介面的語義。它們都可以表示一對多或多對多。 Set對應於java.util.Set介面,表示一個沒有重複元素的集合。 怎樣區別重複元素?這就涉及到物件的同一性。我們知道在資料庫中,我們用主鍵來區分每一條記錄,在Java的物件世界中,我們是用Object.eq

SSH框架之Hibernate的關聯對映之一對映

關聯對映之一對多、多對一對映 一、需求: 部門與員工 一個部門有多個員工 【一對多】 多個員工,屬於一個部門 【多對一】 二、邏輯分析: 三、程式碼實現 1、javabean及對映檔案的配置: 1)Employee.java、Employ

Hibernate一對關係表達

一、關係表達: 1、一對多、多對一表的關係: 學生表:       班級表:      在學生表中,學生的學號是主鍵。在班級表中,班級號是主鍵,因此,學生表的外來鍵是classno。因此,班級對應學生是一對多,學生對應班級是多對一。因為

Hibernate,關係對映單向關聯、雙向關聯、一對一主鍵關聯、一對一外來鍵關聯、關係關聯

2018-11-10  22:27:02開始寫   下圖內容ORM、Hibernate介紹、hibername.cfg.xml結構:     下圖內容hibernate對映檔案結構介紹   下圖內容hibernate

hibernate 雙向對映關係

Book類(圖書類):package com.hc.model; public class Book { private Integer id; private String name;

一對|關係 ---- Hibernate之關聯對映

敘:hibernate中的關聯對映存在一對多多對一關係和多對多關係;本章節電蟲就關聯對映的一對多多對一關係進行學習和總結記錄; Hibernate的關聯對映之“一對多|多對一”關係 準備工作 需要有兩個實體類以及實體類所對應的對映檔案,由於之前建立

JPA學習筆記(10)——對映雙向關聯關係

                     多對多關聯比如現在有兩個實體類:1. Product(商品)2. Category(類別)一個商品可以有多個類別,一個類別也可以有多個商品,這就形成了多對多的關係Productpackage com.jpa.helloworld2;import java.util.L

Hibernate學習(四)———— 雙向對映關係

一、小疑問的解答        問題一:到這裡,有很多學習者會感到困惑,因為他不知道使用hibernate是不是需要自己去建立表,還是hibernate全自動,如果需要自己建立表,那麼主外來鍵這種設定也是自己設定嗎?這讓人感到很困惑,現在就來解決一下這個小疑問(如果知道了的可以直接跳過看下面的多對多對映關係

Hibernate 單向、單向一對雙向一對關聯關係詳解

一對多關係是最普遍的對映關係。比如部門和職工 一對多:從部門的角度,一個部門對應多個職工 多對一:從職工的角度,多個職工對應一個部門 資料庫表中結構: 表 department:did departname 表 Employee:eid   en

Hibernate基於主鍵的單項,雙向對映關係

今天我們來一起談論下hibernate的基於主鍵的單項,雙向多對多對映關係 首先多對多都是基於主鍵的,沒有基於外來鍵的說法 1.基於主鍵的單項多對多 在這裡就是說中間stuobject是一張關係表,將兩張表的主鍵進行關聯,形成了多對多的關係 程式碼如

Hibernate雙向關係、控制反轉、級聯配置

Hibernate多對一關係配置 Students配置檔案: <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0