首页 > 代码库 > 级联保存

级联保存

可以主表级联多表,也可以多表级联主表,原理是一样的,主要的就是xml的配置上面:

cascade="save-update"要加上

 

主表的xml:

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE hibernate-mapping PUBLIC 
 3     "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 4     "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
 5 <!-- ■■■■■■■■文件的名字是:Customer.hbn.xml -->
 6 <hibernate-mapping>
 7     <!-- 配置类和表结构对的映射 -->
 8     <!-- 用 一个类,和另一个表关联,Hibernate框架的本意就是这样 -->
 9     <class name="com.itheima.domain.Customer" table="cst_customer">
10         <!-- 配置id 见到name属性,JavaBean的属性 见到column属性,是表结构的字段 -->
11         <id name="cust_id" column="cust_id">
12             <!-- 主键的生成策略 -->
13             <generator class="natine"></generator>
14         </id>
15         <!-- 配置其他属性 -->
16         <property name="cust_name" column="cust_name"></property>
17         <property name="cust_user_id" column="cust_user_id"></property>
18         <property name="cust_create_id" column="cust_create_id"></property>
19         <property name="cust_source" column="cust_source"></property>
20         <property name="cust_industry" column="cust_industry"></property>
21         <property name="cust_level" column="cust_level"></property>
22         <property name="cust_linkman" column="cust_linkman"></property>
23         <property name="cust_phone" column="cust_phone"></property>
24         <property name="cust_mobile" column="cust_mobile"></property>
25         
26         <!-- 配置一对多  hello hello 
27         set标签 name属性:表示集合的名称
28         cascade属性就是级联保存的属性
29          -->
30          <set name="linkmans" cascade="save-update">
31          <!-- 需要出现子标签 -->
32          <!-- 外键的字段 -->
33          <key column="cust_user_id"></key>
34          <one-to-many class="com.itheima.domain.Linkman"/>
35          </set>
36     </class>
37 
38 </hibernate-mapping>

demo:

 1 /**
 2      * 级联保存,也就是只保存一个数据表的,那另外一个也保存了,这样就比较简单
 3      * 这个是保存客户,级联联系人
 4      */
 5     public void run2(){
 6         Session session = HibernateUtils.getCurrentSession();
 7         Transaction tr = session.beginTransaction();
 8         //保存客户和联系人的数据
 9         Customer c1 = new Customer();
10         c1.setCust_name("美美");
11         
12         //创建两个联系人
13         Linkman l1 = new Linkman();
14         l1.setLkm_name("熊大");
15         Linkman l2 = new Linkman();
16         l2.setLkm_name("熊二");
17         
18         //演示双向关联
19         //单表的设置
20         c1.getLinkmans().add(l1);
21         c1.getLinkmans().add(l2);
22         session.save(c1);
23 
24         tr.commit();
25     }
26     

 

级联保存