hibernate_day03_13_多對多操作(維護第三張表)
阿新 • • 發佈:2019-02-14
維護第三張表關係
1 使用者和角色多對多關係,維護關係通過第三張表維護
2 讓某個使用者有某個角色
第一步 根據id查詢使用者和角色
//1 查詢lucy和經紀人
User lucy = session.get(User.class, 1);
Role role = session.get(Role.class, 1);
第二步 把角色放到使用者裡面
(1)把角色物件放到使用者set集合
// 讓某個使用者有某個角色 //讓lucy有經紀人角色 //1 查詢lucy和經紀人 User lucy = session.get(User.class, 1); Role role = session.get(Role.class, 1); //2 把角色放到使用者的set集合裡面 lucy.getSetRole().add(role);
//多對多 維護第三張表 @Test public void testTable(){ SessionFactory sessionFactory = null; Session session = null; Transaction tx = null; try{ //得到sessionFactory sessionFactory = HibernateUtils.getSessionFactory(); //得到session session = sessionFactory.openSession(); //開啟事務 tx = session.beginTransaction(); // 讓某個使用者有某個角色 //讓lucy有經紀人角色 //1 查詢lucy和經紀人 User lucy = session.get(User.class, 1); Role role = session.get(Role.class, 1); //2 把角色放到使用者的set集合裡面 lucy.getSetRole().add(role); //提交事務 tx.commit(); }catch(Exception e){ //回滾事務 tx.rollback(); }finally{ //關閉 session.close(); sessionFactory.close(); } }
3 讓某個使用者沒有某個角色
第一步 根據id查詢使用者和角色
第二步 從使用者裡面把角色去掉
(1)從set集合裡面把角色移除
// 讓某個使用者沒有有某個角色
User user = session.get(User.class, 2);
Role role = session.get(Role.class, 3);
//2 從使用者裡面把角色去掉
user.getSetRole().remove(role);
com.hlg.hibernatetest.HibernateManytoMany.java
package com.hlg.hibernatetest; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.junit.Test; import com.hlg.entity.Customer; import com.hlg.entity.LinkMan; import com.hlg.manytomany.Role; import com.hlg.manytomany.User; import com.hlg.utils.HibernateUtils; public class HibernateManytoMany { //多對多 級聯儲存 @Test public void testSave(){ SessionFactory sessionFactory = null; Session session = null; Transaction tx = null; try{ //得到sessionFactory sessionFactory = HibernateUtils.getSessionFactory(); //得到session session = sessionFactory.openSession(); //開啟事務 tx = session.beginTransaction(); //新增兩個使用者,為每個使用者新增兩個角色 //1 建立物件 User user1 = new User(); user1.setUser_name("lucy"); user1.setUser_password("123"); User user2 = new User(); user2.setUser_name("mary"); user2.setUser_password("456"); Role r1 = new Role(); r1.setRole_name("總經理"); r1.setRole_memo("總經理"); Role r2 = new Role(); r2.setRole_name("祕書"); r2.setRole_memo("祕書"); Role r3 = new Role(); r3.setRole_name("保安"); r3.setRole_memo("保安"); //2 建立關係,把角色放到使用者裡面 // user1 -- r1/r2 user1.getSetRole().add(r1); user1.getSetRole().add(r2); // user2 -- r2/r3 user2.getSetRole().add(r2); user2.getSetRole().add(r3); //3 儲存使用者 session.save(user1); session.save(user2); //提交事務 tx.commit(); }catch(Exception e){ //回滾事務 tx.rollback(); }finally{ //關閉 session.close(); sessionFactory.close(); } } //多對多 維護第三張表 @Test public void testTable(){ SessionFactory sessionFactory = null; Session session = null; Transaction tx = null; try{ //得到sessionFactory sessionFactory = HibernateUtils.getSessionFactory(); //得到session session = sessionFactory.openSession(); //開啟事務 tx = session.beginTransaction(); // 讓某個使用者有某個角色 //讓lucy有經紀人角色 //1 查詢lucy和經紀人 User lucy = session.get(User.class, 1); Role role = session.get(Role.class, 1); //2 把角色放到使用者的set集合裡面 lucy.getSetRole().add(role); //提交事務 tx.commit(); }catch(Exception e){ //回滾事務 tx.rollback(); }finally{ //關閉 session.close(); sessionFactory.close(); } } //多對多 維護第三張表 @Test public void testTableDelete(){ SessionFactory sessionFactory = null; Session session = null; Transaction tx = null; try{ //得到sessionFactory sessionFactory = HibernateUtils.getSessionFactory(); //得到session session = sessionFactory.openSession(); //開啟事務 tx = session.beginTransaction(); // 讓某個使用者沒有有某個角色 User user = session.get(User.class, 2); Role role = session.get(Role.class, 3); //2 從使用者裡面把角色去掉 user.getSetRole().remove(role); //提交事務 tx.commit(); }catch(Exception e){ //回滾事務 tx.rollback(); }finally{ //關閉 session.close(); sessionFactory.close(); } } }