Hibernate雙向多對多個物件關聯式模式映射

來源:互聯網
上載者:User

標籤:資源   毛主席   equals   映射   man   actor   table   hashset   one   

1 雙向many-to-many

業務模型:

      描述員工和項目

      一個員工同時可以參與多重專案

      一個項目中可以包含多個員工

分析:資料庫的資料模型,通過中間關係表,建立兩個one-to-many構成many-to-many

 1 create table emp 2 ( 3     eno int primary key auto_increment, 4     ename varchar 5 ); 6 create table project 7 ( 8     pid int primary key auto_increment, 9     pname varchar,10 );11 create table relationship12 (13     eno int,14     pid int,15 );
1.1 描述java的資料模型

 

1.2進行pojo的映射配置

  

1.3載入設定檔產生資料庫模型

 

在資料庫為兩個主外鍵。

1.4進行CRUD操作1.4.1 添加員工資訊
 1 @Test 2 public void testSaveEmp() 3 { 4     Session session = HibernateSessionFactory.getSession(); 5     //開啟事務 6     Transaction tr = session.beginTransaction(); 7     //建立員工對象 8     Emp emp = new Emp(); 9     emp.setEname("毛主席");10     session.save(emp);11     tr.commit();12     session.close();13 }
1.4.2添加項目資訊
 1 @Test 2 public void testSaveProject() 3 { 4     Session session = HibernateSessionFactory.getSession(); 5     //開啟事務 6     Transaction tr = session.beginTransaction(); 7     //建立員工對象 8     Project p = new Project(); 9     p.setPname("渡江戰役");10     session.save(p);11     tr.commit();12     session.close();13 }
1.4.3添加項目同時分配員工

新添加項目,將項目分配給已經存在的員工

 1 /** 2  * 添加項目資料,分配已有員工 3  * ****/ 4 @Test 5 public void saveProjectEmp() 6 { 7     //獲得Session 8     Session session=sf.openSession(); 9     //開啟事務10     Transaction tr=session.beginTransaction();11     //建立項目對象12     Project p= new Project();13     p.setPname("CRM");14     //查詢員工的對象15     List<Emp> elist = session.createCriteria(Emp.class).list();16     //將員工分配給新項目:給中間表插入資料17     p.setEmps(new HashSet(elist));18     session.save(p);19     //提交事務20     tr.commit();21     //釋放資源22     session.close();23 }
1.4.4解除員工和項目的關係

通過員工解除關係的。

 1 /*** 2  * 解除員工和項目的關係 3  * 刪除中間表中的資料 4  * ***/ 5 @Test 6 public void deleteProjectEmp() 7 { 8     //獲得Session 9     Session session=sf.openSession();10     //開啟事務11     Transaction tr=session.beginTransaction();12     //查詢員工對象13     Emp emp = (Emp) session.get(Emp.class, 1);14     //獲得員工參與的所有項目15     Set<Project> pros=emp.getPros();16     System.out.println(pros);17     //查詢項目對象18     Project p=(Project) session.get(Project.class,3);19     System.out.println(p);20     /****21      *22      * set集合中元素的地址和單條查詢獲得項目對象的地址一樣,所有set集合中的項目對象和23      * 單條查詢獲得的項目對象,是同一個對象,所以pros.remove(p),刪除了集合中地址和p一樣的對象24      *25      * *****/26     //p.equals(obj);27     //從pros中刪除某個項目28     /***29      * 現在關係是由員工斷開(預設inverse=false)30      * many-to-many這種情況:儲存其中一方的inverse=true31      * ***/32     pros.remove(p);//33     //提交事務34     tr.commit();35     //釋放資源36     session.close();37 }

 

 

Hibernate雙向多對多個物件關聯式模式映射

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.