欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Hibernate的级联操作

程序员文章站 2022-03-02 19:00:19
...

Hibernate的级联操作

所谓的级联操作,Hibernate支持根据配置的关联关系,实现通过一个实体类的对象,可以操作多个表的数据。(操作:增删改)。我们将这个现象称为级联操作。

配置级联操作的属性:
- cascade用于启动级联操作
- save-update:启动级联保存和更新
- detele:启动级联删除

级联增加

配置步骤:
1. 配置关联关系支持级联增加

<!-- 一对多
set标签:用于指定实体类里面Set集合的属性
  级联操作:配置cascade属性
  save-update:支持级联增加和级联更新
  delete:支持级联删除
-->
<set name="linkmans" cascade="save-update">
    <!-- 必须配置外键,因为表与表的关系都是通过外键关联 -->
    <key column="lkm_cust_id"></key>
    <!-- 声明关联关系 
        one-to-many标签:作用声明表与表的关系
        注意:声明关联关系时,必须要指定集合元素的类型
    -->
    <one-to-many class="com.entity.Linkman" />
</set>
  1. 构建一个封装了两个表的数据的Customer实体对象,实现增加操作
 //需求:通过Customer的对象插入客户信息和对应的联系人信息。
@Test
public void save(){
    Session session = HibernateUtils.getSession();
    Transaction transaction = session.beginTransaction();
    //封装数据
    Customer c=new Customer();
    c.setCustName("阿里巴巴");
    //创建一个联系人
    Linkman linkman1=new Linkman();
    linkman1.setLkmName("马云");
    Linkman linkman2=new Linkman();
    linkman2.setLkmName("蔡崇信");

    //将联系人封装到客户实体对象里面
    c.getLinkmans().add(linkman1);
    c.getLinkmans().add(linkman2);

    //保存数据
    session.save(c);

    //提交
    transaction.commit();
    //关闭
    session.close();
}

注意事项:级联增加必须外键字段设置为空.

  • 为什么外键字段一定要设置为null呢?

  • 原因:Hibernate级联增加的顺序是

    1. 先插入主键表的主键
    2. 然后插入外键表的数据
    3. 最后在将主键表的主键值更新到外键键字段。

如果外键不能为null,导致,第2步,插入外键表的数据的时候就报错了