简单的一表对多表的双向关联

Posted Tidhy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了简单的一表对多表的双向关联相关的知识,希望对你有一定的参考价值。

多表的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.Linkman" table="cst_linkman">
10         <!-- 配置id 见到name属性,JavaBean的属性 见到column属性,是表结构的字段 -->
11         <id name="lkm_id" column="lkm_id">
12             <!-- 主键的生成策略 ,这个除了natine  就是uuid -->
13             <generator class="natine"></generator>
14         </id>
15         <!-- 配置其他属性 -->
16         <property name="lkm_name" column="lkm_name"></property>
17         <property name="lkm_gender" column="lkm_gender"></property>
18         <property name="lkm_phone" column="lkm_phone"></property>
19         <property name="lkm_mobile" column="lkm_mobile"></property>
20         <property name="lkm_email" column="lkm_email"></property>
21         <property name="lkm_qq" column="lkm_qq"></property>
22         <property name="lkm_position" column="lkm_position"></property>
23         <property name="lkm_memo" column="lkm_memo"></property>
24         
25         <!-- 配置多方的xml  多对一的  hello  hello 
26         name表示的是当前JavaBean中的属性
27         class 当前属性的全路径
28         column外键的字段
29          -->
30         <many-to-one name="customer" class="com.itheima.domain.Customer" column="lkm_cust_id"></many-to-one>
31     </class>
32 
33 </hibernate-mapping>

单表的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         
29          -->
30          <set name="linkmans">
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 package com.itheima.test;
 2 
 3 import org.hibernate.Session;
 4 import org.hibernate.Transaction;
 5 import org.junit.Test;
 6 
 7 import com.itheima.Utils.HibernateUtils;
 8 import com.itheima.domain.Customer;
 9 import com.itheima.domain.Linkman;
10 
11 /**
12  * 测试一对多
13  * @author Administrator
14  *
15  */
16 @Test
17 public class demo1 {
18     /**
19      * 最麻烦的 双向关联的方式去保存数据
20      */
21     public void run1(){
22         Session session = HibernateUtils.getCurrentSession();
23         Transaction tr = session.beginTransaction();
24         //保存客户和联系人的数据
25         Customer c1 = new Customer();
26         c1.setCust_name("美美");
27         
28         //创建两个联系人
29         Linkman l1 = new Linkman();
30         l1.setLkm_name("熊大");
31         Linkman l2 = new Linkman();
32         l2.setLkm_name("熊二");
33         
34         //演示双向关联
35         //单表的设置
36         c1.getLinkmans().add(l1);
37         c1.getLinkmans().add(l2);
38         //多表的设置
39         l1.setCustomer(c1);
40         l2.setCustomer(c1);
41         //保存数据
42         session.save(c1);
43         session.save(l1);
44         session.save(l2);
45         tr.commit();
46     }
47 }

Hibernate的xml:


 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE hibernate-configuration PUBLIC
 3     "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
 4     "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
 5 <!-- ■■■■■■■■文件名字是:hibernate.cfg.xml -->
 6 <hibernate-configuration>
 7     <!-- 记住,先配置SessionFactory标签,一个数据库对应一个SessionFactory标签 -->
 8     <session-factory>
 9         <!-- 必须也要配置的参数有5个,4大参数,数据库的方言 -->
10         <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
11         <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate_day03</property>
12         <property name="hibernate.connection.username">root</property>
13         <property name="hibernate.connection.password">123</property>
14         <!-- 数据库的方言 -->
15         <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
16 
17         <!-- 可选配置 -->
18 
19         <!-- 映射配置文件 -->
20         <mapping resource="com/itheima/domain/Customer.hbn.xml"/>
21         <mapping resource="com/itheima/domain/hibernate.cfg.xml"/>
22     </session-factory>
23 
24 </hibernate-configuration>

 


以上是关于简单的一表对多表的双向关联的主要内容,如果未能解决你的问题,请参考以下文章

day 64 Django 第五天 多表对多表的对应关系ORM

mysql4.0中一表关联多表左连接sql写法:

springdatajpa多表对多表有额外字段的情况处理

oracle02--多表关联查询

Flask--(一对多)模型渲染表单数据

多对多表应该有一个主键吗?