1、多對(duì)多級(jí)聯(lián)保存
圖片.png
配置文件的添加cascade屬性:
在任意一方的set屬性 里面配置一次就好:
<set name="roleSet" table="role_user" cascade="save-update,delete">
編寫代碼實(shí)現(xiàn):
ts = session.beginTransaction(); //創(chuàng)建實(shí)體類對(duì)象
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("廣州");
//創(chuàng)建實(shí)體類對(duì)象的聯(lián)系
user.getRoleSet().add(role);
user.getRoleSet().add(role1);
user1.getRoleSet().add(role2);
user1.getRoleSet().add(role1);
//保存對(duì)象,角色對(duì)象會(huì)被級(jí)聯(lián)保存
session.save(user1);
session.save(user);
ts.commit();
} catch (Exception e) {
ts.rollback();
e.printStackTrace();
} finally {
session.close();
}
2金句、多對(duì)多的級(jí)聯(lián)刪除(一般不考慮)
首先是在任意一方的映射配置文件中配置cascade屬性含有 delete值
然后編寫代碼實(shí)現(xiàn);
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戚长、多對(duì)多關(guān)系中第三張表的維護(hù)
圖片.png
具體實(shí)現(xiàn)代碼如下:
@Test
public void testThird() {
Session session = HibernateUtils.getSession();
Transaction ts = null;
try {
ts = session.beginTransaction();
//為用戶14增加一個(gè)管理員角色
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();
}
}