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

  1.1:第一首先引包,省略

  1.2:第二创建实体类:

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

    创建User.java:

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

    IdCart.java:

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

 package com.bie.bean;
/**
* @author BieHongLi
* @version 创建时间:2017年3月22日 下午2:06:35
* 用户的实体类
*/
public class User { private int id;
private String name; //用户和身份证一对一的关联关系映射
private IdCart idCart; public int getId() {
return id;
} public void setId(int id) {
this.id = id;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public IdCart getIdCart() {
return idCart;
} public void setIdCart(IdCart idCart) {
this.idCart = idCart;
} @Override
public String toString() {
return "User [id=" + id + ", name=" + name + ", idCart=" + idCart + "]";
} }
 package com.bie.bean;
/**
* @author BieHongLi
* @version 创建时间:2017年3月22日 下午2:07:09
* 用户身份证信息的实体类
*/
public class IdCart { private String cartNum;//身份证号,主键,对象唯一标识
private String place; //身份证和用户,一对一的关系
private User user; public String getCartNum() {
return cartNum;
} public void setCartNum(String cartNum) {
this.cartNum = cartNum;
} public String getPlace() {
return place;
} public void setPlace(String place) {
this.place = place;
} public User getUser() {
return user;
} public void setUser(User user) {
this.user = user;
} @Override
public String toString() {
return "IdCart [cartNum=" + cartNum + ", place=" + place + ", user=" + user + "]";
} }

  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>

 <?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.bie.bean">
<class name="User" table="user2">
<!-- 主键映射 -->
<id name="id" column="id">
<generator class="native"></generator>
</id> <!-- 非主键映射 -->
<property name="name" column="name" type="string" length="20"></property> <!-- 其他字段映射 -->
<!--
一对一映射,没有主键
-->
<one-to-one name="idCart" class="IdCart"></one-to-one> </class> </hibernate-mapping>
 <?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.bie.bean">
<class name="IdCart" table="idCart">
<!-- 主键映射 -->
<id name="cartNum" column="cartNum">
<!-- <generator class="native"></generator> -->
<!-- 身份证信息自己手动设置更加人性化哦 -->
<generator class="assigned"></generator>
</id> <!-- 非主键映射 -->
<property name="place" column="place" type="string" length="20"></property> <!-- 其他字段映射 -->
<!--
(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> </class>
</hibernate-mapping>

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

 <!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <hibernate-configuration>
<!-- 一个session-factory节点代表一个数据库 -->
<session-factory>
<!-- 第一部分:数据库连接配置 -->
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql:///test</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">123456</property> <!-- 第二部分:其他相关配置 -->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.show_sql">true</property>
<!-- <property name="hibernate.format_sql">true</property> -->
<property name="hibernate.hbm2ddl.auto">create</property>
<!--
1:每次在创建sessionFactory时执行创建表,当调用sessionFactory的close方法的时候,删除表
#hibernate.hbm2ddl.auto create-drop 2:每次都重新建表,如果已经存在就先删除再创建
#hibernate.hbm2ddl.auto create 3:如果表不存在就创建,表存在就不创建
#hibernate.hbm2ddl.auto update 4:生成环境时候执行验证,当映射文件的内容与数据库表结构不一样的时候就报错
#hibernate.hbm2ddl.auto validate
--> <!-- 第三部分,加载映射文件 -->
<!-- <mapping resource="com/bie/po/User.hbm.xml"/> --> <!-- 第三部分,加载映射文件,一对一主键和外键的映射的练习 -->
<mapping resource="com/bie/bean/User.hbm.xml"/>
<mapping resource="com/bie/bean/IdCart.hbm.xml"/> </session-factory>
</hibernate-configuration>

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

 package com.bie.test;

 import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.junit.Test; import com.bie.bean.IdCart;
import com.bie.bean.User; /**
* @author BieHongLi
* @version 创建时间:2017年3月22日 下午2:51:34
*
*/
public class One2One { private static SessionFactory sf = null;
static{
sf = new Configuration().configure().buildSessionFactory();
} @Test
public void test(){
Session session = sf.openSession();
session.beginTransaction(); //用户信息
User user = new User();
user.setName("张三三"); //身份证信息
IdCart idCart = new IdCart();
idCart.setCartNum("41072519930416****");
idCart.setPlace("深圳市"); //设置用户信息和身份证信息的关系
idCart.setUser(user); //如果设置级联操作,只用保存身份证信息即可
session.save(idCart); session.getTransaction().commit();
session.close();
}
}

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>

 <?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.bie.domain">
<class name="IdCart" table="idCart">
<!-- 主键映射 -->
<id name="id" column="id">
<!--
id节点指定的是主键映射,即id是主键
主键生成方式:foreign即把别的表的主键作为当前表的主键,
property(关键字,不能修改)指定引用的对象==》对象的全名com.bie.domain.User==》
对象映射文件com.bie.domain.xml==》表table(id)
-->
<generator class="foreign">
<param name="property">user</param>
</generator>
</id> <property name="cartNum" column="cartNum" type="string" length="20"></property>
<!-- 非主键映射 -->
<property name="place" column="place" type="string" length="20"></property> <!-- 其他字段映射 -->
<!--
(1)一对一映射,有外键方
(2)用户表的主键做身份证表的主键
(3)constrained="true"设置外键
-->
<one-to-one name="user" constrained="true" class="User"></one-to-one> </class>
</hibernate-mapping>

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

最新文章

  1. Python迁移MySQL数据到MongoDB脚本
  2. 使用System.arraycopy()实现数组之间的复制
  3. 【转】linux打包压缩命令
  4. python27+django数据库配置常见问题
  5. 【Cocos2d-X开发学习笔记】第09期:渲染框架之菜单类(CCMenu)的使用
  6. sql - 查询所有表中包含指定值
  7. Windows 驱动开发 - 5
  8. CentOS6.3下安装配置SVN(Subversion)
  9. codeforces 316F3 Suns and Rays
  10. 【从翻译mos文章】SGA_TARGET与SHMMAX关系
  11. P2P应用中的NAT穿透问题
  12. centos 7(Linux) 下yum安装mysql
  13. DALI 2.0解码模块
  14. 喜马拉雅音频下载工具 - xmlyfetcher
  15. nginx——location匹配流程图
  16. kickstart-G
  17. CentOS 6.8 防火墙配置
  18. LeetCode--235--二叉树的最近公共祖先
  19. ArcGIS 在高清屏中主界面界面字体和图标显示过小,如何解决?
  20. 使用VBS发邮件

热门文章

  1. xml/map转换器,递归设计思路【纯原】
  2. Codeforces 219D - Choosing Capital for Treeland(树形dp)
  3. ueditor 百度编辑器,自定义右键菜单
  4. JavaScript之判断参数的数值的详细类型
  5. pygame设置text和image共同显示
  6. 【通信】URLConnection 详细
  7. window.location详解
  8. saltstack系列~第一篇
  9. Dubbo服务容错(整合hystrix)
  10. 【Shell】获取当前路径