1、多對多級聯保存
圖片.png
配置文件的添加cascade屬性:
在任意一方的set屬性 里面配置一次就好:
<set name="roleSet" table="role_user" cascade="save-update,delete">
編寫代碼實現:
ts = session.beginTransaction(); //創建實體類對象
Role role = new Role();
role.setRole_name("管理員");
role.setRole_memo("管理員描述");
Role role1 = new Role();
role1.setRole_name("員工");
role1.setRole_memo("員工描述");
Role role2 = new Role();
role2.setRole_name("保安");
role2.setRole_memo("保安描述");
User user = new User();
user.setUsername("jhon");
user.setPassword("5550");
user.setAddress("廣州");
User user1 = new User();
user1.setUsername("lucy");
user1.setPassword("520");
user1.setAddress("廣州");
//創建實體類對象的聯系
user.getRoleSet().add(role);
user.getRoleSet().add(role1);
user1.getRoleSet().add(role2);
user1.getRoleSet().add(role1);
//保存對象,角色對象會被級聯保存
session.save(user1);
session.save(user);
ts.commit();
} catch (Exception e) {
ts.rollback();
e.printStackTrace();
} finally {
session.close();
}
2、多對多的級聯刪除(一般不考慮)
首先是在任意一方的映射配置文件中配置cascade屬性含有 delete值
然后編寫代碼實現;
Session session = HibernateUtils.getSession();
Transaction ts = null;
try {
ts = session.beginTransaction();
User user = (User)session.get(User.class, 13);
if (user != null) {
session.delete(user);
}
ts.commit();
}catch (Exception e) {
ts.rollback();
e.printStackTrace();
} finally {
session.close();
}
3、多對多關系中第三張表的維護
圖片.png
具體實現代碼如下:
@Test
public void testThird() {
Session session = HibernateUtils.getSession();
Transaction ts = null;
try {
ts = session.beginTransaction();
//為用戶14增加一個管理員角色
User user14 = (User)session.get(User.class, 14);
Role role7 = (Role)session.get(Role.class, 7);
user14.getRoleSet().add(role7);
//為用戶15刪除管理員角色
User user15 = (User)session.get(User.class, 15);
user15.getRoleSet().remove(role7);
ts.commit();
} catch (Exception e) {
ts.rollback();
e.printStackTrace();
} finally {
session.close();
}
}