zoukankan      html  css  js  c++  java
  • hibernate级联关系

    <级联关系>

     

    代码:

     

    Test.class

     

    package qau.edu.ren;

     

    import java.util.Date;

     

    import org.hibernate.Session;

    import org.hibernate.Transaction;

    import org.hibernate.cfg.Configuration;

     

     

     

    public class Test {

            

             public static void main(String[] args) {

                      

            

    //               获取Session

                      

                       Session session = HibernateUtils.getSession();

                      

    //               开启事务;

                      

                       Transaction tr = HibernateUtils.openTransaction();

                      

                      

                       Customer customer = new Customer();

                      

                       customer.setName("BB");

                      

                       Order o1 = new Order();

                       Order o2 = new Order();

                      

                       o1.setName("aa");

                       o1.setDate(new Date());

                      

                       o2.setName("bb");

                       o2.setDate(new Date());

     

                      

    //               Order关联Customer时候才能使inverse属性有效,因为这个时候,关联关系的由Order

    //               也就是n的一方进行维护,所以没有上面的关联,是不会在Order表中插入外键的数值的。

                       o1.setCus(customer);

                       o2.setCus(customer);

                      

     

                      

    //      实现CustomerOrder的关联(实现1n的关联)

                      

                       customer.getOrders().add(o2);

                       customer.getOrders().add(o1);

    //              

    //              

                       session.save(customer);

    //               session.save(o2);

    //               session.save(o1);

                      

    //              

    //              

                      

    //               Customer cus = (Customer)session.get(Customer.class, 1);

    //              

    //               Set<Order> orders = cus.getOrders();

                      

                      

                       tr.commit();

                      

                      

                      

                       session.close();

                      

             }

     

     

    }

     

     

    总结:

     

    当把保存Order的代码注释掉之后,执行后,只是在Customer数据表中插入了相应的数据,在Order中是没有任何数据的。

     

    Customer.hbm.xml文件:

     

    <?xml version="1.0"?>

    <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"

    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

     

    <hibernate-mapping package="qau.edu.ren">

     

       <class name="Customer" table="t_customer">

      

         <id name="id" column="c_id">

           <generator class="native"></generator>

         </id>

        

         <property name="name" column="c_name"/>

        

         <set name="orders" table="t_order" inverse="true" cascade="save-update">

     

           <key column="c_id"/>   

           <one-to-many class="Order"/> 

     

         </set> 

       </class>

    </hibernate-mapping>

     

     

     

    上面的代码中在<set>中加入“cascade="save-update"”指的是:在1-n关联关系中,当主动方进行保存和更新操作的时候,也需要被动方进行相应的操作,实现级联功能。这样更正之后,进行test测试之后,会在OrderCustomer表中插入相应的数据。

    如果没有一直坚持,也不会有质的飞跃,当生命有了限度,每个人的价值就会浮现。
  • 相关阅读:
    几个计算广告学的课程
    Jie Bao 牛人cv
    如果英剧《黑镜子》拍第三季,你来写一集剧本策划,你想写一个什么样的故事呢? 知乎
    设计模式之迭代器与组合模式
    javascript 时钟clock
    项目中的需求蔓延
    一个产生随机random markers 例子
    设计模式之模板方法模式
    设计模式之反(向)模式
    转:用函数式编程技术编写优美的 JavaScript
  • 原文地址:https://www.cnblogs.com/shiguangshuo/p/4083929.html
Copyright © 2011-2022 走看看