1. 程式人生 > >Hibernate 新增資料 二 (多對多)

Hibernate 新增資料 二 (多對多)

Hibernate 新增資料 (多對多)

新增多對多資料


class Person
{
    private int id ;
    private String name;
    private int age ;
    //多對多 
    private Set<Works> workSet = new HashSet<>();

    //get set 方法省略 
}

public class Works 
{

   private int id;
   private String name;

   //多對多
   private Set<Person> personSet = new
HashSet<Person>(); }

配製Person類對應檔案清單 Person.hbm.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <class name="com.Person"
dynamic-insert="true" dynamic-update="false" table="t_person_list">
<!-- 主鍵 --> <id name="id"> <generator class="native"></generator> </id> <!-- 屬性 name配製 --> <property name="name" length="51" type
="string">
</property> <!-- 屬性 age配製 --> <property name="age" type="integer"></property> <!-- 多對多配製 --> <!--多對多描述 --> <!--table 中間表 --> <set name="workSet" table="t_p_w_list"> <!--本類對應的外來鍵 --> <key column="p_id"></key> <!--另一方配製 --> <many-to-many class="com.Works" column="w_id"></many-to-many> </set> </class> </hibernate-mapping>

配製Works類對應檔案清單 Works.hbm.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <class name="com.Works" dynamic-insert="true"
        dynamic-update="false" table="t_w_list">
        <!-- 主鍵 -->
        <id name="id">
            <generator class="native"></generator>
        </id>


        <property name="name" length="51" type="string"></property>

            <!--多對多描述 -->
        <set name="personSet" table="t_p_w_list">
            <key column="w_id"></key>
            <many-to-many class="com.Person"
                column="p_id"></many-to-many>
        </set>
    </class>


</hibernate-mapping>

新增資料操作 一 (只儲存Person)


public void addModel()
{

    Person person = new Person();
    person.setName("xx");
    person.setAge(12);


    Session session = H3Utils.getCurrentSession();
     session.beginTransaction();
     //儲存 
     //執行save方法
     session.save(person);

     session.getTransaction().commit();

}

說明 一:

當執行 save 方法時  會呼叫一次 insert語句 
insert into t_person_list (name, age) values(?, ?)

新增資料操作 二 (只儲存Works)


public void addModel()
{

    Works works = new Works();
    works.setName("java");


    Session session = H3Utils.getCurrentSession();
     session.beginTransaction();
     //儲存 
     //當執行save方法的時候 會
     session.save(works);

     session.getTransaction().commit();

}

說明 二:

當執行 save 方法時  會呼叫一次 insert語句 
insert into t_w_list (name) values(?)

新增資料操作 三 (儲存Person 和 Works Person關聯Works 主關聯從表 或者 Works關聯Person 從關聯主)


public void addPersonAndWork1() {
    Session currentSession = H3Utils.getCurrentSession();
    currentSession.beginTransaction();

    Person person = new Person();
    person.setName("xiaosan1");
    person.setAge(121);

    Works works = new Works();
    works.setName("23");

    person.getWorkSet().add(works);

    //儲存person
    currentSession.save(person);
    currentSession.save(works);

    currentSession.getTransaction().commit();
}

說明 三 :

當執行 currentSession.save(person); 方法時  會呼叫一次 insert語句 
insert into t_person_list (name) values(?)

當執行 currentSession.save(works); 方法時  會呼叫一次 insert語句 
insert into   t_w_list (name)  values (?)

最後 commit 
insert into t_p_w_list (p_id, w_id) values (?, ?)

新增資料操作 四 (儲存Person 和 Course 並進行雙向關聯 設定inverse方式)

這時我們需要設定 多對多中 一方放棄主動維護關係表,比如這裡設定Person不去主動維護

<!--多對多描述 -->
        <set name="workSet" table="t_p_w_list" inverse="true">
            <key column="p_id"></key>
            <many-to-many class="android.longs.study.test.Works"
                column="w_id"></many-to-many>
        </set>

public void addModel(){
    Session currentSession = H3Utils.getCurrentSession();
    currentSession.beginTransaction();

    Person person = new Person();
    person.setName("xiaosan1");
    person.setAge(121);

    Works works = new Works();
    works.setName("23");
    //person 關聯 works 
    person.getWorkSet().add(works);
    //works 關聯 person
    works.getPersonSet().add(person);

    //儲存person
    currentSession.save(person);
    currentSession.save(works);

    currentSession.getTransaction().commit();
}

說明 四 :

當執行 currentSession.save(person); 
insert into t_person_list (name, age) values(?, ?)

當執行 currentSession.save(works);
insert into t_w_list (name) values(?)

當最後commit時 執行 
insert into t_p_w_list (w_id, p_id) values(?, ?)

從而建立了主從關係對映

新增資料操作 五 (儲存Course 和 Person 並且進行雙向關聯 使用級聯操作 )

可以在 Person.hbn.xml 中對應設定級聯儲存
<!--多對多描述 -->
        <set name="workSet" table="t_p_w_list" cascade="save-update">
            <key column="p_id"></key>
            <many-to-many class="android.longs.study.test.Works"
                column="w_id"></many-to-many>
        </set>
cascade 
    設定為none , 沒有級聯操作
    設定為 save-update,級連儲存或者更新 當save一方的時候,如果這時關聯了瞬時態的多方,那麼將觸發級聯操作,將瞬時態的多方轉為持久態,也就是多執行了一次insert,最後再執行update 
    設定為 delete,級連刪除 當刪除一方的時候,會同時去刪除其所關聯的多方  
    設定為 delete-orphan,孤兒刪除 
    設定為 all,代表 可以擁有 save-updatedelete 總和
    cascade  設定為 all-delete-orphan,代表 所有  
public void addPersonAndCourseFuoncion1() {
    Session currentSession = H3Utils.getCurrentSession();
    currentSession.beginTransaction();

    Person person = new Person();
    person.setName("xiaosan1");
    person.setAge(121);

    Works works = new Works();
    works.setName("23");
    //person 關聯 works 
    person.getWorkSet().add(works);
    //works 關聯 person
    works.getPersonSet().add(person);

    //儲存person
    currentSession.save(person);

    currentSession.getTransaction().commit();}

說明 五 :

當執行 currentSession.save(person); 
insert into t_person_list (name, age) values(?, ?)

當執行 currentSession.save(works);
insert into t_w_list (name) values(?)

當最後commit時 執行 
insert into t_p_w_list (w_id, p_id) values(?, ?)

從而建立了主從關係對映

相關推薦

Hibernate 新增資料 ()

Hibernate 新增資料 (多對多) 新增多對多資料 class Person { private int id ; private String name;

hibernate關係的新增與刪除

程式碼 bookdao public Integer save(Book book) { Session session = SessionFactoryUtils.getSession(); Transaction transaction = session.beginTran

Hibernate新增

案例: 1:實體類: package com.zking.five.entity; import java.util.HashSet; import java.util.Set; public class Book { private Integer bookId;

【SSH三大框架】Hibernate基礎第十篇:load()懶載入分析以及一對一、一對一、懶載入的分析

一、懶載入的定義: 懶載入:在WEB應用程式中,經常會需要查詢資料庫,系統的響應速度在很大程度上是與資料庫互動的響應。因此,如果能夠優化與資料庫的互動速度,則能夠大大提高WEB應用的響應速度。 例如:當有一個Student類和一個Teacher類。當我們載入一個學生的所有資

hibernate annotation中間表新增其他欄位的第三種方法

本示例主要以學生(T_Student)和課程(T_Course)之間的多對多關係,中間表Score(分數),學生表和課程表是多對多關係,另外為他們的關係新增額外的欄位---分數: T_Student類如下: package server.com.upc.test; impo

hibernate,中間表無資料問題

1.兩個實體類:類目,屬性 2.關係多對多 3.類目Category類 @ManyToMany(cascade = CascadeType.ALL) @JoinTable(

JAVAWEB開發之Hibernate詳解()——Hibernate的持久化類狀態與轉換、以及一級快取詳解、關聯關係的對映(一對、級聯)

package cn.test.hibernate3.demo2; import org.hibernate.Session; import org.hibernate.Transaction; import org.junit.Test; import cn.test.hibernate3.demo2.

Hibernate-----條件查詢,新增查詢案例

====================================================================================================== 1.表單輸入條件  <body>    <form

Hibernate對映資料 - 對映

Hibernate對映資料 - 多對多對映 Hibernate在對映多對多的資料模型時,會採用中間表的形式,通過與中間表形成兩個一對多連線得到多對多的對映關係。 雙向多對多對映 學生資訊與課程資訊之間存在多對多的關係。本例中實現查詢學生下的所有課程資訊同時實現查詢某一課程下所有學生資

Hibernate 學習心得1: 關係中,中間表無法插入資料

Hibernate 學習心得之一 多對多關係中,中間表無法插入資料。最近學習 spring4+hibernate4,學習中遇到了很多坑。在這裡我來說說我遇到的坑,這裡就不介紹如何spring如何整合hibernate。目前學習過程中,我遇到的兩個問題1.為何在hibernat

Hibernate的annotation的寫法(中間表可以有個額外新增的欄位)

方案一   中間表聯合主鍵,自動生成 一般情況下,多對多的關聯關係是需要中間表的; 情況一:如果中間表僅僅是做關聯用的,它裡面僅有2個外來鍵做聯合主鍵,則使用ManyToMany(不用寫中間表的Model,只需要寫出兩張主表的model即可) 學生表 @Entity@Table(name = "T_STUD

Hibernate中間表有個欄位欄位的註解配置方式(

@Entity@Table(name = "T_STUDENT")@SequenceGenerator(name = "SEQ_STUDENT", sequenceName = "SEQ_STUDENT")public class Student2 implements Serializable { priv

Hibernate操作

factory cnblogs all nec ping log per mes lds 1、首先創建兩個實體類(訂單類和商品類) 訂單類: /** * 在多對多關系中,在多的那一方,必須要有一個set集合屬性來保存一個那個實體 * 並提供共有的get

(轉)Hibernate框架基礎——關聯關系映射

-- 否則 del 畫圖 兩個 delete pub attribute cnblogs http://blog.csdn.net/yerenyuan_pku/article/details/52756536 多對多關聯關系映射 多對多的實體關系模型也是很常見的,比如學

【SSH高速進階】——Hibernate 映射

pen prop package 轉載 map tex test lec set   說到多對多關系。印象最深刻的就是大學的選修課。一個學生能夠選修多門課程,一門課程能夠有多個學生選修,學生所選的每一門課程還有成績。這個場景的E-R圖例如以下:  

Hibernate學習筆記(五) --- 創建基於中間關聯表的映射關系

mys 兩個 override pac tid 一對多 main ber different 多對多映射是在實際數據庫表關系之間比較常見的一種,仍然以電影為例,一部電影可以有多個演員,一個演員也可以參演多部電影,電影表和演員表之間就是“多對多”的關系 針對多對多的映射關系,

2.2、Hibernate用註解方式實現一對關系

tab 技術部 employee join incr 無法運行 hset strategy urn 一、一對多關系   1、在上一篇日誌中用.xml配置文件項目基礎上,再往lib目錄先添加一個包-hibernate-jpa-2.0-api-1.0.0.Final.jar  

hibernate的映射之四(雙向關聯)

als oot bean odi 生成 指定 數據庫方言 映射文件 格式化sql Many-to-Many 多對多的映射可以使用一組Java集合不包含任何重復的元素來實現。我們已經看到了Hibernate如何設置映射集合。 集(SET)被映射到與映射表中<set&g

hibernate 2 映射

開發環境 username ron 標準 pro ets 啟動 private net 一、實體類 1、Classes.java 1 package cn.gs.wwg.entity; 2 3 import java.util.Set; 4 5 public

Hibernate框架學習(七)——關系

ber hiberna 保存 hibernate .com 表達 clas 持久 員工 一、關系表達 1、表中的表達 2、實體中的表達 3、orm元數據中的表達 在User.hbm.xml中添加: 在Role.hbm.xml中添加(與上相反):