1、多对多级联保存
配置文件的添加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、多对多关系中第三张表的维护
具体实现代码如下:
@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();
}
}