Hibernate的级联操作

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步,插入外键表的数据的时候就报错了




猜你喜欢

转载自blog.csdn.net/kato_op/article/details/80304683