一对多(级联新增,级联查询,删除)

本文介绍了Hibernate中一对多关联的概念,包括关联的分类和方向性。通过客户和订单的例子,详细阐述了如何建立一对多双向关联,以及在XML映射文件中配置cascade、inverse、outter-join和lazy属性的作用。此外,还讨论了级联新增、查询和删除的操作,并分析了在这些操作中可能出现的问题和解决方案。
摘要由CSDN通过智能技术生成

1. 什么是关联(association)
  1.1 关联指的是类之间的引用关系。如果类A与类B关联,那么被引用的类B将被定义为类A的属性。例如:
      public class A{
        private B b = new B;
        public A(){}
      }
  1.2 关联的分类:关联可以分为一对一、一对多/多对一、多对多关联
      关联是有方向的
      

#关键点都在数据库中的外键上面,请好好理解下面这二句SQL和一对多及多对一的关系
#select * from Orders where cid=?   //这条SQL返回客户对应的0-n个订单
#select * from Customers where customerId=?  //这条SQL返回订单对应的1个客户
#通过这二条SQL不难看出,外键在这里有二个用途:查找客户的订单,查找订单对应的客户
2. 案例:如何建立客户和订单一对多双向关联
  2.1 先不建立客户和订单的关联关系,定义实体及映射文件,单独执行保存操作
  2.2 建立客户到订单的一对多关联关系
<!--
                cascade:用来配置维护实体类之间的关系所用
                inverse:关系交由反方控制
              -->
            <set  name="orderItems" cascade="save-update" inverse="true">
            <!-- 填外键 -->
                <key column=

在Django中,处理一对多(Many-to-Many)关系的新建和更新通常涉及到两个模型之间的关联表。例如,如果你有两个模型`Author`和`Book`,作者可以有多本书,书也可以有多个作者,这就是一对多关系。以下是使用`QuerySet`在Django中进行操作的一般步骤: 1. **新建数据**: - 要添加一个新的作者及其关联的书籍,你可以先创建作者实例,然后通过属性访问其`books`关联集合: ```python author = Author.objects.create(name="John Doe") book = Book(title="Book Title") # 将新书添加到作者的书籍列表 author.books.add(book) ``` - 或者,如果`Book`有一个反向引用(`author_set`): ```python book.authors.add(author) ``` 2. **更新数据**: - 如果你想更新一个作者已有的书籍,例如删除一本书或替换书籍列表,可以使用`remove()`或`clear()`方法: ```python # 删除某本书 author.books.remove(book) # 清空所有书籍 author.books.clear() # 或者添加新的书籍 author.books.add(Book(title="New Book")) ``` 3. **通过外键更新关联**: - 如果你想要更新书籍信息,并自动更新所有关联的作者,可以使用`save()`方法,因为它会触发数据库的级联更新规则: ```python book.title = "Renamed" book.save() # 这将会更新所有与book相关的author对象的title字段 ``` 记得在实际操作时,检查并处理可能出现的异常,比如试图删除最后一本书可能会导致错误。同时,确保你理解了你的数据模型结构以及它们之间的约束。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值