標籤:資源 毛主席 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雙向多對多個物件關聯式模式映射