hibernate多对多关系(二)

级联新增inverse=“false”或inverse=“true”的三种方式
第一种:

借助book.hbm.xml :inverse=“false” ,category.hbm.xml : inverse =“true” 来讲

在这两个xml配置文件中,一false一true 的意思是指将级联关系的维护的责任交给book对象

inverse是相反的意思,book.hbm.xml :inverse=“false” 这句代码在问是否将桥接表的数据交给反方维护吗? 这里的反方是category,false,则是自己book维护。category 中inverse=“true”则是book维护,所以Book表是主控方

写一个简答的dao方法

public Integer addBook(Book book) {
        Session session = SessionFactoryUtils.getSession();
        Transaction transaction = session.beginTransaction();
        Integer bid = (Integer) session.save(book);
        transaction.commit();
        session.close();
        return bid;
    }

因为category是new出来的,所以是临时状态,而在多对多的关系中,hibernate管理的是持久态对象,因此打勾勾的是正确的,这样关联的数据才能加进去。

@Test
    public void testAdd1() {
        Book book = new Book();
        book.setPrice(45f);
        book.setBookName("不死不灭2");    
        Category category = new Category();
        category.setCategoryId(2);
        //此时category是临时状态  hibernate管理的是持久态对象
//        book.getCategorys().add(category); //x
        book.getCategorys().add(this.categoryDao.getCategory(category));//√
        this.booDao.addBook(book);
        
    }

第二种

借助book.hbm.xml :inverse=“true” ,category.hbm.xml : inverse =“true” 来讲

两个配置文件都为true,那么就相当于两人吃完饭,都要对方付钱,

那么当你添加级联新增数据时,不会报错,数据会加进去,但不会维护桥接表

第三种:

借助book.hbm.xml :inverse=“false” ,category.hbm.xml : inverse =“false” 来讲

两个配置文件都为false,那么就相当于两人吃完饭,都自己付钱,

那么当你添加级联新增数据时,不会报错,数据会加进去,但不会维护桥接表

这两种都是一样的结果,都不会维护桥接表。

级联删除
级联删除的主控方可以直接删除有关联关系的书,且在桥接表中有引用

比如直接删除一本不死不灭的书,这本书关联的是玄幻额类别,在桥接表中有引用

那么如果一类别玄幻能删除与这一类别有关联的书籍吗? 答案是不能删除

因为类别是被控方,,那么被控方是通过什么在删除这样的关联关系呢?

被控方删除:

被控方通过主控方解除关联关系,再去删除被控方。

public void del(Category category) {
        Session session = SessionFactoryUtils.getSession();
        Transaction transaction = session.beginTransaction();
        Category c = session.get(Category.class, category.getCategoryId());
        for(Book b : c.getBooks()) {
            b.getCategorys().remove(c);//通过主控方book解除与被控方category的关系
        }
        session.delete(c);//在删除被控方
        transaction.commit();
        session.close();
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值