1. 程式人生 > >hibernate集合對映,one-to-many,刪除集合成員

hibernate集合對映,one-to-many,刪除集合成員

1、one方對映檔案 

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
    Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
    <class name="com.epro.examsys.model.Department" table="t_department" catalog="edu">
        <id name="id" type="java.lang.Integer">
            <column name="id" />
            <generator class="native" />
        </id>
        <property name="name" type="java.lang.String">
            <column name="departName" not-null="true" />
        </property>
        <set name="emps" lazy="false" inverse="true" cascade="save-update, delete,delete-orphan

">
         <key>
             <column name="depart_id"></column>
         </key>
            <one-to-many class="com.epro.examsys.model.Employee"/>
        </set>
    </class>
</hibernate-mapping>

2、many方對映檔案

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"

http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
    Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
    <class name="com.epro.examsys.model.Employee" table="t_employee" catalog="edu">
        <id name="id" type="java.lang.Integer">
            <column name="id" />
            <generator class="native" />
        </id>
        <property name="name" type="java.lang.String">
            <column name="empName" not-null="true" />
        </property>
        <many-to-one name="depart" column="depart_id" class="com.epro.examsys.model.Department" lazy="false">
        </many-to-one>
    </class>
</hibernate-mapping>

3、one方model檔案

package com.epro.examsys.model;

import java.util.Set;

public class Department {
 private int id;
 private Set<Employee> emps;
 public Set<Employee> getEmps() {
  return emps;
 }
 public void setEmps(Set<Employee> emps) {
  this.emps = emps;
 }
 public int getId() {
  return id;
 }
 public void setId(int id) {
  this.id = id;
 }
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 private String name;
}

4、many方model檔案

package com.epro.examsys.model;

public class Employee {
 private int id;
 private String name;
 private Department depart;
 public int getId() {
  return id;
 }
 public void setId(int id) {
  this.id = id;
 }
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 public Department getDepart() {
  return depart;
 }
 public void setDepart(Department depart) {
  this.depart = depart;
 }
}

5、Hibernate工具類

package com.epro.examsys.util;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;

public final class HibernateUtil {
 private static SessionFactory sessionFactory;
 private HibernateUtil(){
  
 }
 
 static
 {
  Configuration cfg = new Configuration();
  cfg.configure();//載入classpath中的hibernate配置檔案hibernate.cfg.xml
  sessionFactory = cfg.buildSessionFactory();
 }
 
 public static SessionFactory getSessionFactory()
 {
  return sessionFactory;
 }
 
 public static Session getSession(){
  return sessionFactory.openSession();
 }
 
 static void add(Object obj)
 {
  Session s = null;
  Transaction tx = null;
  try{
   s = HibernateUtil.getSession();
   tx = s.beginTransaction();
   s.save(obj);
   tx.commit();
  }catch(HibernateException ex){
   if(tx!=null)
    tx.rollback();
   ex.printStackTrace();
   throw ex;
  }finally{
   if(null!=s)
    s.close();
  }
 }
 
 static void del(Object obj)
 {
  Session s = null;
  Transaction tx = null;
  try{
   s = HibernateUtil.getSession();
   tx = s.beginTransaction();
   s.delete(obj);
   tx.commit();
  }catch(HibernateException ex){
   if(tx!=null)
    tx.rollback();
   ex.printStackTrace();
   throw ex;
  }finally{
   if(null!=s)
    s.close();
  }
 }
 
 static void update(Object obj)
 {
  Session s = null;
  Transaction tx = null;
  try{
   s = HibernateUtil.getSession();
   tx = s.beginTransaction();
   s.update(obj);
   tx.commit();
  }catch(HibernateException ex){
   if(tx!=null)
    tx.rollback();
   ex.printStackTrace();
   throw ex;
  }finally{
   if(null!=s)
    s.close();
  }
 }
}

6、junit測試程式碼

@Test
 public void testSaveOrUpdateDepartment(){
  Session s = null;
  Transaction tx = null;
  try
  {
   s = HibernateUtil.getSessionFactory().openSession();
   tx = s.beginTransaction();
   Department depart = (Department) s.get(Department.class, 2);
   Employee e = depart.getEmps().iterator().next();
   System.out.println("begin:"+depart.getEmps().size());
   depart.getEmps().remove(e);
   depart.setName("hahaha...");
   System.out.println("end:"+depart.getEmps().size());
   tx.commit();
   Assert.assertTrue(true);
  }catch(HibernateException hEX){
   hEX.printStackTrace();
   if(tx!=null)
    tx.rollback();
   Assert.assertFalse(false);
  }
  finally
  {
   if(s!=null)
    s.close();
  }
 }

相關推薦

hibernate集合對映one-to-many,刪除集合成員

1、one方對映檔案  <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//E

JPA關係對映one-to-manymany-to-one(另inverse=“true”解析)

one-to-many(一對多)和many-to-one(多對一)雙向關聯 假設部門與員工是一對多關係,反過來員工與部門就是多對一關係。 Dept.java類 public class Dept implements java.io.Serializable {

【SSH快速進階】——Hibernate一對一對映one-to-one)——主鍵關聯對映

  現實生活中,有很多場景需要用到一對一對映,比如每個學生只有一個學生證,每個公民只有一張身份證等。這裡用公民-身份證來舉例說明。      在Hibernate中實現一對一對映,有兩種實現方式:1

hibernate學習4之one-to-many單向關聯(不推薦)

一對多和多對一的對映策略是一樣的,只是站的角度不同. 多對一關聯對映:在多的一端加入一個外來鍵指向一的一端,它維護的關係是多指向一 一對多關聯對映:在多的一端加入一個外來鍵指向一的一端,它維護的關係是一指向多 先上配置檔案: <!DOCTYPE hibernate-c

Hibernate one-to-many / many-to-one關係對映

Page:  <1|2> 現實生活中有很多1對多(多對1)的關係模型。比如,一個人可以有0到多套房子,0到多輛汽車;一個父親有0到多個孩子等等。這種關係被稱作1對多關係。反過來,房子與人,汽車與人的關係,以及孩子與父親的關係就是多對一的關係。這裡需

使用註解的Hibernate one-to-many映射

java temp odi href mes pub ring pack gin One to many映射關系指的是兩個實體間一個實體可以和多個實體有關聯關系,但是多的這一端只能和一的這一端的一個實例有關系。它是一個1 到 n的關系。例如在任何的公司員工可以註冊多個銀行賬

Ruby on Rails一對多關聯(One-to-Many

用例 存在 BE details 一對一 擁有 class room 方法 在上一篇文章中,我們知道通過has_one和belongs_to方法定義一對一關聯關系。接下來是更常見的情況,一對多關聯。比如老師與所教課程的關系,一個老師負責多個課程。換成對象之間的關系就是:一個

[Hibernate] One-To-Many

nfa 同時 image bubuko 主鍵 img int pub any   一對多需要在一的類配置多的類的set泛型集合.   多的一端需要添加一的類作為屬性,其和數據庫對應的是對應表的主鍵. 一個購物車有多個商品,購物車有個cart_id作為主鍵,商品除了自己的it

hibernate one to many(many to one)

   多對一維護的關係是:多指向一的關係,有了此關係,載入多的時候可以將一載入上來   一對多維護的關係是:一指向多的關係,有了此關係,在載入一的時候可以將多載入上來   而單向一對多關聯對映是在一的一端維護關係的 1.實體類:  

hibernate連線sqlserver2000問題的解決(父子關係同時儲存時發生 one-to-many & many-to-one

TransOrder: <set name="OrderItems" table="orderitem" lazy="false" inverse="true" cascade="all">  <key column="Order_ID"/>  <

hibernate one-to-manymany-to-one的使用

和one to one 一樣,首先寫了兩個實體類Department(private int deptid;private String dname;private String location; private Set<Employee> employee

JPA關係對映系列三:one-to-manymany-to-one

SpringDataJPA是Spring Data的一個子專案,通過提供基於JPA的Repository極大的減少了JPA作為資料訪問方案的程式碼量,你僅僅需要編寫一個介面整合下SpringDat

關於Hibernatemany-to-oneone-to-many的一些理解

       一對多,主要從兩個實體出發,看強調的重點是一還是多的一端,也就是外來鍵所在的一端,如果外來鍵所在一端是一那麼對關係的維護就需要在一的一端。 如果外來鍵在多的一端那麼這個時候就應該是“多對一”維護端需要建立在多的一端。 如果兩端都有互相的主鍵作為外來鍵,那麼這個

一個完整的hibernateone-to-many的例子

前段時間一直在研究hibernate的one-to-many,看了不少資料也在本論壇上求教過,但由於本人對Hibernate研究的時間不是很長,所以花了不少時間和精力.昨天終於弄出來了,現在與大家分享,希望對初學者有幫助!1、設定資料庫,本人使用的資料庫是Oracle 9i 

Hibernate在配置 one-to-many時應該注意的事項

其實配置one-to-many的對映很簡單,就是在one所代表的這個類中新增一個集合物件,一般用set,來儲存對應的many所代表的那個類的物件,比如,一個person對應多個order,(一個人對應多個訂單),那麼在person類中新增private Set<Ord

one-to-many & many-to-one 為什麼只生成了一張表呢?

one-to-many & many-to-one 為什麼只生成了一張表呢? 相信我在你mapping-resources沒有新增hbm.xml出錯的話,多半是版本問題。 研究了半天發現,原來是mysql驅動包的版本不匹配。 我之前用的是 mysql-connector-ja

one-to-many的懶載入及原理分析

如果是一對多,多對一,甚至是多對多那效率就差別大了!!如果一對多lazy=”false”或者fetch=”join”會同時查詢出所有關聯的物件,對資料庫和對網路影響將是很大地。(lazy=”false” 採用多條查詢語句

【java】xxx.hbm.xml檔案中的many-to-oneone-to-many理解

一、前言       在前幾天中自己在學習ssh的過程中,發現Hibernate需要配置一個名字叫xxx.hbm.xml的檔案,這個檔案主要是使用Hibernate對映到相應的表。自然在這個檔案裡面會

cascade屬性通常在one-to-many關係裡應用

在資料庫裡,進行增加、修改、刪除記錄的時候,經常會涉及到父子關係的表。 例如:有省份表和城市表,其中城市表有一個外來鍵province_id引用到省份表的主鍵。這樣,可以把省份表看成是父表,把城市表看成是子表,城市表記錄的存在依賴於省份表的記錄。(文中提到的例子,所有的程式碼在附件裡都有,所以這裡的描述從簡)

用 Flask 來寫個輕部落格 (6) — (M)VC_models 的關係(one to many)

目錄 前文列表 擴充套件閱讀 前言 models 中的關係能夠對映成為關係型資料庫表中的關係,models 中可以相互建立引用,使得相關聯的資料能夠很容易的一次性的從資料庫中取出。 一對多 首先繼續在 models