zoukankan      html  css  js  c++  java
  • 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:删除和当前对象解除关系的附属对象。

  • 相关阅读:
    Markdown语法
    负载均衡、反向代理、CDN的概念
    IDEA远程调试
    跨域简介
    java命令:javac/java/javap
    尾递归实现斐波那契数列
    Java集合:框架
    volatile简介与原理
    乐观锁和悲观锁
    移动端布局的心得
  • 原文地址:https://www.cnblogs.com/lonecloud/p/5967809.html
Copyright © 2011-2022 走看看