• Hibernate学习(三)一对多数据的保存


    保存习惯代码

     1     @Test
     2     public void saveTwoTableTest(){
     3         Transaction transaction = null;
     4         try {
     5             transaction = session.beginTransaction();//创建session
     6             Customer customer=new Customer();
     7             customer.setCustomerName("123");
     8             //在Customer中设置了一对多关系
     9             Order order=new Order();
    10             order.setOrderNumber("100");
    11             customer.getOrders().add(order);
    12             session.save(customer);//保存操作
    13             transaction.commit();//提交事务
    14         } catch (HibernateException e) {
    15             if (transaction!=null) {
    16                 transaction.rollback();//事务回滚
    17             }
    18             e.printStackTrace();
    19         }finally{
    20             if (session!=null&&session.isOpen()) {
    21                 session.close();//关闭session
    22             }
    23         }
    24     }

    在这个保存中需要注意的事项:

    1.如果按照这个保存的步骤的话:
    需要在

    <set name="orders" cascade="all-delete-orphan">

    在set集合中加上级联操作

    不然会出现如下报错:

    object references an unsaved transient instance - save the transient instance before flushing: cn.lonecloud.domain.Order

    下面是级联属性的属性值:

     Cascade 属性值:

    none:在保存、删除修改对象的时候,不考虑其附属物的操作

    save-update:在保存、更新当前对象时,级联保存、更新附属物。

    delete:在删除当前对象时,级联删除附属物。 

    all: 包含save-update和delete的操作 当在一对多关系的时候remove一个对象的时候,那么他将会更新附属物的属性,并不会删除附属物

    delete-orphan:删除和当前对象解除关系的附属对象。

  • 相关阅读:
    JAVA与编译语言及解释语言的关系
    Java虚拟机工作原理详解
    VMWare 网络连接模式(bridged、NAT、host-only)详解
    Ubuntu修改语言环境为英文
    Ubuntu安装和设置SSH服务
    Eclipse NDK 配置
    2018年长沙理工大学第十三届程序设计竞赛
    埃森哲杯第十六届上海大学程序设计联赛春季赛暨上海高校金马五校赛
    算法训练 安慰奶牛
    算法训练 最短路
  • 原文地址:https://www.cnblogs.com/lonecloud/p/5967809.html
Copyright © 2020-2023  润新知