前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Hibernate之关联关系映射(一对一主键映射和一对一外键映射)

Hibernate之关联关系映射(一对一主键映射和一对一外键映射)

作者头像
别先生
发布2018-01-02 11:32:47
1.3K0
发布2018-01-02 11:32:47
举报
文章被收录于专栏:别先生

1:Hibernate的关联关系映射的一对一外键映射:

  1.1:第一首先引包,省略

  1.2:第二创建实体类:

    这里使用用户信息和身份证信息的关系,用户的主键编号既可以做身份证信息的主键又可以做身份证信息的外键,这里先做外键。

    创建User.java:

用户和身份证一对一的关联关系映射           private IdCart idCart;

    IdCart.java:

身份证和用户,一对一的关系           private User user;

代码语言:javascript
复制
 1 package com.bie.bean;
 2 /** 
 3 * @author BieHongLi 
 4 * @version 创建时间:2017年3月22日 下午2:06:35 
 5 * 用户的实体类
 6 */
 7 public class User {
 8 
 9     private int id;
10     private String name;
11     
12     //用户和身份证一对一的关联关系映射
13     private IdCart idCart;
14 
15     public int getId() {
16         return id;
17     }
18 
19     public void setId(int id) {
20         this.id = id;
21     }
22 
23     public String getName() {
24         return name;
25     }
26 
27     public void setName(String name) {
28         this.name = name;
29     }
30 
31     public IdCart getIdCart() {
32         return idCart;
33     }
34 
35     public void setIdCart(IdCart idCart) {
36         this.idCart = idCart;
37     }
38 
39     @Override
40     public String toString() {
41         return "User [id=" + id + ", name=" + name + ", idCart=" + idCart + "]";
42     }
43     
44 }
代码语言:javascript
复制
 1 package com.bie.bean;
 2 /** 
 3 * @author BieHongLi 
 4 * @version 创建时间:2017年3月22日 下午2:07:09 
 5 * 用户身份证信息的实体类
 6 */
 7 public class IdCart {
 8 
 9     private String cartNum;//身份证号,主键,对象唯一标识
10     private String place;
11     
12     //身份证和用户,一对一的关系
13     private User user;
14 
15     public String getCartNum() {
16         return cartNum;
17     }
18 
19     public void setCartNum(String cartNum) {
20         this.cartNum = cartNum;
21     }
22 
23     public String getPlace() {
24         return place;
25     }
26 
27     public void setPlace(String place) {
28         this.place = place;
29     }
30 
31     public User getUser() {
32         return user;
33     }
34 
35     public void setUser(User user) {
36         this.user = user;
37     }
38 
39     @Override
40     public String toString() {
41         return "IdCart [cartNum=" + cartNum + ", place=" + place + ", user=" + user + "]";
42     }
43 
44 }

  1.3:创建好实体类,就可以开始配置映射关系了:

    User.hbm.xml:

<one-to-one name="idCart" class="IdCart"></one-to-one>

    IdCart.hbm.xml:

<!--               (1)一对一映射,有外键方               (2)特殊的多对一映射,多了一个外键,设置主键唯一性               (3)cascade="save-update"级联保存               (4)用户表的主键做身份证信息的外键               (5)unique="true"给外键字段添加唯一约束              --> <many-to-one cascade="save-update" unique="true" name="user" column="userId" class="User">

    </many-to-one>

代码语言:javascript
复制
 1 <?xml version="1.0"?>
 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 <hibernate-mapping package="com.bie.bean">
 6     <class name="User" table="user2">
 7         <!-- 主键映射 -->
 8         <id name="id" column="id">
 9             <generator class="native"></generator>
10         </id>    
11         
12         <!-- 非主键映射 -->
13         <property name="name" column="name" type="string" length="20"></property>
14         
15         
16         <!-- 其他字段映射 -->
17         <!-- 
18             一对一映射,没有主键
19          -->
20         <one-to-one name="idCart" class="IdCart"></one-to-one>
21         
22     </class>
23 
24 </hibernate-mapping>
25     
26     
代码语言:javascript
复制
 1 <?xml version="1.0"?>
 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 <hibernate-mapping package="com.bie.bean">
 6     <class name="IdCart" table="idCart">
 7         <!-- 主键映射 -->
 8         <id name="cartNum" column="cartNum">
 9             <!-- <generator class="native"></generator> -->
10             <!-- 身份证信息自己手动设置更加人性化哦 -->
11             <generator class="assigned"></generator>
12         </id>
13         
14         <!-- 非主键映射 -->
15         <property name="place" column="place" type="string" length="20"></property>
16         
17         <!-- 其他字段映射 -->
18         <!-- 
19             (1)一对一映射,有外键方
20             (2)特殊的多对一映射,多了一个外键,设置主键唯一性
21             (3)cascade="save-update"级联保存
22             (4)用户表的主键做身份证信息的外键
23             (5)unique="true"给外键字段添加唯一约束
24          -->
25         <many-to-one cascade="save-update" unique="true" name="user" column="userId" class="User"></many-to-one>
26         
27     </class>
28 </hibernate-mapping>

  1.4:最后就可以配置Hibernate.cfg.xml配置了。

代码语言:javascript
复制
 1 <!DOCTYPE hibernate-configuration PUBLIC
 2     "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
 3     "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
 4 
 5 <hibernate-configuration>
 6     <!-- 一个session-factory节点代表一个数据库 -->
 7     <session-factory>
 8         <!-- 第一部分:数据库连接配置 -->
 9         <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
10         <property name="hibernate.connection.url">jdbc:mysql:///test</property>
11         <property name="hibernate.connection.username">root</property>
12         <property name="hibernate.connection.password">123456</property>
13         
14         <!-- 第二部分:其他相关配置 -->
15         <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
16         <property name="hibernate.show_sql">true</property>
17         <!-- <property name="hibernate.format_sql">true</property> -->
18         <property name="hibernate.hbm2ddl.auto">create</property>
19         <!-- 
20              1:每次在创建sessionFactory时执行创建表,当调用sessionFactory的close方法的时候,删除表
21              #hibernate.hbm2ddl.auto create-drop
22             
23             2:每次都重新建表,如果已经存在就先删除再创建
24             #hibernate.hbm2ddl.auto create
25             
26             3:如果表不存在就创建,表存在就不创建
27             #hibernate.hbm2ddl.auto update
28             
29             4:生成环境时候执行验证,当映射文件的内容与数据库表结构不一样的时候就报错
30             #hibernate.hbm2ddl.auto validate
31           --> 
32         
33         <!-- 第三部分,加载映射文件 -->
34         <!-- <mapping resource="com/bie/po/User.hbm.xml"/> -->
35         
36         
37         <!-- 第三部分,加载映射文件,一对一主键和外键的映射的练习 -->
38         <mapping resource="com/bie/bean/User.hbm.xml"/>
39         <mapping resource="com/bie/bean/IdCart.hbm.xml"/>
40         
41     </session-factory>
42 </hibernate-configuration>    
43     
44     
45     

  1.5:最后测试,既可以完成对一对一外键映射的使用和学习:

代码语言:javascript
复制
 1 package com.bie.test;
 2 
 3 import org.hibernate.Session;
 4 import org.hibernate.SessionFactory;
 5 import org.hibernate.cfg.Configuration;
 6 import org.junit.Test;
 7 
 8 import com.bie.bean.IdCart;
 9 import com.bie.bean.User;
10 
11 /** 
12 * @author BieHongLi 
13 * @version 创建时间:2017年3月22日 下午2:51:34 
14 * 
15 */
16 public class One2One {
17 
18     private static SessionFactory sf = null;
19     static{
20         sf = new Configuration().configure().buildSessionFactory();
21     }
22     
23     @Test
24     public void test(){
25         Session session = sf.openSession();
26         session.beginTransaction();
27         
28         //用户信息
29         User user = new User();
30         user.setName("张三三");
31         
32         //身份证信息
33         IdCart idCart = new IdCart();
34         idCart.setCartNum("41072519930416****");
35         idCart.setPlace("深圳市");
36         
37         //设置用户信息和身份证信息的关系
38         idCart.setUser(user);
39         
40         //如果设置级联操作,只用保存身份证信息即可
41         session.save(idCart);
42         
43         session.getTransaction().commit();
44         session.close();
45     }
46 }

2:Hibernate的关联关系映射的一对一主键映射:

  2.1:第一步引包省略

  2.2:第二步,创建实体类,和上面的实体类的区别就是在身份证实体类表里面加了一个成员变量

      private int id;//用户表的主键做身份证表的主键

  2.3:第三步配置映射文件,这里修改的主要是身份证的映射文件,修改如下所示:

    User.hbm.xml:主要是包的改动

<hibernate-mapping package="com.bie.domain"></hibernate-mapping>

    IdCart.hbm.xml:这个改动略大哦

<!-- 主键映射 -->            <id name="id" column="id">              <generator class="foreign">                   <param name="property">user</param>                 </generator>             </id>

<one-to-one name="user" constrained="true" class="User"></one-to-one>

代码语言:javascript
复制
 1 <?xml version="1.0"?>
 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 <hibernate-mapping package="com.bie.domain">
 6     <class name="IdCart" table="idCart">
 7         <!-- 主键映射 -->
 8         <id name="id" column="id">
 9         <!-- 
10             id节点指定的是主键映射,即id是主键
11             主键生成方式:foreign即把别的表的主键作为当前表的主键,
12                 property(关键字,不能修改)指定引用的对象==》对象的全名com.bie.domain.User==》
13                 对象映射文件com.bie.domain.xml==》表table(id)
14          -->
15             <generator class="foreign">
16                 <param name="property">user</param>
17             </generator>
18         </id>
19         
20         <property name="cartNum" column="cartNum" type="string" length="20"></property>
21         <!-- 非主键映射 -->
22         <property name="place" column="place" type="string" length="20"></property>
23         
24         <!-- 其他字段映射 -->
25         <!-- 
26             (1)一对一映射,有外键方
27             (2)用户表的主键做身份证表的主键
28             (3)constrained="true"设置外键
29          -->
30         <one-to-one name="user" constrained="true" class="User"></one-to-one>
31         
32     </class>
33 </hibernate-mapping>

Hibernate的关联关系的映射搞清楚如何映射会使用即可,这里LZ记录方便为了自行脑补~~~

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-03-22 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档