1. 程式人生 > >Hibernate框架學習(七)——多對多關系

Hibernate框架學習(七)——多對多關系

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框架學習(七)——多對多關系