一对多的级联操作
级联删除
删除客户级联删除联系人
<set name="linkMans" cascade="save-update,delete">
@Test
public void demo5() {
Session session=HibernateUtils.getCurrentSession();
Transaction tx = session.beginTransaction();
Customer customer =session.get(Customer.class, 2l);
session.delete(customer);
tx.commit();
}
删除联系人级联删除客户(基本不用)
<many-to-one name="Customer" cascade="save-update,delete" class="HibernateDemo01.Customer" column="lkm_cust_id"></many-to-one>
@Test
/**
* * 级联删除:
* * 删除联系人删除客户,删除的主体是客户,需要在Customer.hbm.xml中配置
* * <Set name ="LinkMans" cascade="delete">
*/
public void demo6() {
Session session=HibernateUtils.getCurrentSession();
Transaction tx = session.beginTransaction();
/*
* //没有设置级联删除,默认情况:修改联系人的外健,删除客户 Customer customer=session.get(Customer.class,
* 1l); session.delete(customer);
*/
//先查询再删除
//删除客户,同时删除联系人
LinkMan linkMan=session.get(LinkMan.class, 3l);//查询
session.delete(linkMan);
tx.commit();
}
一对多设置了双向关联产生多余的SQL语句
@Test
public void demo07() {
Session session=HibernateUtils.getCurrentSession();
Transaction tx = session.beginTransaction();
LinkMan linkMan = session.get(LinkMan.class, 2l);
Customer customer=session.get(Customer.class, 2l);
linkMan.setCustomer(customer);
customer.getLinkMans().add(linkMan);
tx.commit();
}
- 解决多余的SQL语句
- 单向维护:
- 使一方放弃外键维护权:
- 一的一方放弃。在set上配置inverse=”true”
- 一对多的关联查询的修改的时候。(CRM练习–)
<set name="linkMans" cascade="save-update,delete" inverse="true">
区分cascade和inverse
@Test
public void demo08() {
Session session = HibernateUtils.getCurrentSession();
Transaction tx = session.beginTransaction();
Customer customer=new Customer();
customer.setCust_name("张三");
LinkMan linkMan=new LinkMan();
linkMan.setLkm_name("陈七");
customer.getLinkMans().add(linkMan);
session.save(customer);
tx.commit();
}