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表中插入相应的数据。

如果没有一直坚持,也不会有质的飞跃,当生命有了限度,每个人的价值就会浮现。
原文地址:https://www.cnblogs.com/shiguangshuo/p/4083929.html