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"
"
<!--
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-many和many-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-many與many-to-one的使用
和one to one 一樣,首先寫了兩個實體類Department(private int deptid;private String dname;private String location; private Set<Employee> employee
JPA關係對映系列三:one-to-many和many-to-one
SpringDataJPA是Spring Data的一個子專案,通過提供基於JPA的Repository極大的減少了JPA作為資料訪問方案的程式碼量,你僅僅需要編寫一個介面整合下SpringDat
關於Hibernate中many-to-one和one-to-many的一些理解
一對多,主要從兩個實體出發,看強調的重點是一還是多的一端,也就是外來鍵所在的一端,如果外來鍵所在一端是一那麼對關係的維護就需要在一的一端。 如果外來鍵在多的一端那麼這個時候就應該是“多對一”維護端需要建立在多的一端。 如果兩端都有互相的主鍵作為外來鍵,那麼這個
一個完整的hibernate的one-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-one和one-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