可以主表级联多表,也可以多表级联主表,原理是一样的,主要的就是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