Hibernate框架學習(七)——多對多關系
阿新 • • 發佈:2018-02-14
ber hiberna 保存 hibernate .com 表達 clas 持久 員工
一、關系表達
1、表中的表達
2、實體中的表達
3、orm元數據中的表達
在User.hbm.xml中添加:
在Role.hbm.xml中添加(與上相反):
二、操作關聯屬性
1、保存員工及角色
1 public class Demo { 2 @Test 3 //保存員工以及角色 4 public void fun1(){ 5 //1.獲得session 6 Session session = HibernateUtils.openSession(); 7 //2.開啟事務8 Transaction tx= session.beginTransaction(); 9 //3.操作 10 //================================= 11 //1>創建兩個User 12 User u1=new User(); 13 u1.setUser_name("張三"); 14 15 User u2=new User(); 16 u2.setUser_name("蘇牧"); 17 18//2>創建兩個Role 19 Role r1=new Role(); 20 r1.setRole_name("總裁"); 21 22 Role r2=new Role(); 23 r2.setRole_name("保安"); 24 25 //3>用戶表達關系 26 u1.getRoles().add(r1); 27 u1.getRoles().add(r2); 28 29 u2.getRoles().add(r1);30 u2.getRoles().add(r2); 31 //4>角色表達關系 32 r1.getUsers().add(u1); 33 r1.getUsers().add(u2); 34 35 r2.getUsers().add(u1); 36 r2.getUsers().add(u2); 37 38 //5>調用Save方法一次保存 39 session.save(u1); 40 session.save(u2); 41 session.save(r1); 42 session.save(r2); 43 //================================= 44 //4.提交事務 45 tx.commit(); 46 //5.關閉資源 47 session.close(); 48 } 49 }
直接執行會報錯,因為在多對多關系中,一定要選擇一方放棄維護關系!(可以選擇去掉角色表達關系的四行代碼)
2、為張三新增角色(只需要修改步驟三操作裏面的內容)
1 //1>獲得張三用戶 2 User user = session.get(User.class, 1l); 3 //2>創建角色-公關 4 Role r=new Role(); 5 r.setRole_name("公關"); 6 //3>將角色添加到用戶中 7 user.getRoles().add(r); 8 //4>將角色轉換為持久化 9 session.save(r);
3、為張三解除一個角色(也只需要修改步驟三操作裏面的內容)
1 //1>獲得張三用戶 2 User user = session.get(User.class, 1l); 3 //2>獲得要操作的角色對象(保安) 4 Role r=session.get(Role.class, 2l); 5 //3>將角色從用戶的角色集合中移除 6 user.getRoles().remove(r);
三、進階操作
1、inverse屬性
基於上述操作1保存操作,如果不去掉任何代碼,在配置文件Role.hbm.xml中添加inverse屬性,並設置為true,同樣也能完成操作。
2、級聯屬性
基於上述操作2新增操作,可以選擇去掉最後的save操作,在配置文件User.hbm.xml中使用cascade屬性,保存用戶時同時保存相應角色。
Hibernate框架學習(七)——多對多關系