zoukankan      html  css  js  c++  java
  • Hibernate中的一对一映射

    1.需求

      用户和身份证是一一对应的关系。

      有两种对应方式:

        用户id作为身份证表的外键,身份证号作为主键;

        用户id作为身份证表的主键;

    2.实体Bean设计

      User:

    public class User {
        private int userId;
        private String userName;
        private IDCard idCard;
        set...
        get...
    }

      IDCard(用户id作为外键):

    public class IDCard {
        private String cardNum;
        private String place;
        private User user;
        set...
        get...
    }

      IDCard(用户id作为主键):

    public class IDCard {
      //必须有此属性作为主键
        private int userId;
        private String cardNum;
        private String place;
        private User user;
        set...
        get...
    }

    3.配置映射文件

      user.hbm.xml

    <?xml version="1.0" encoding="utf-8" ?>
    <!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.juaner.hibernate.idcard">
        <class name="User" table="t_usercard">
            <id name="userId" column="u_id">
                <generator class="native"/>
            </id>
            <property name="userName" column="u_name"/>
            <!--一对一映射-->
            <one-to-one name="idCard" class="IDCard"/>
        </class>
    
    </hibernate-mapping>

      用户id作为外键:

    <?xml version="1.0" encoding="utf-8" ?>
    <!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.juaner.hibernate.idcard">
        <class name="IDCard" table="t_idcard" >
            <id name="cardNum">
                <!--允许赋值-->
                <generator class="assigned"/>
            </id>
            <property name="place"/>
            <!--一对一映射,有外键而且唯一-->
            <many-to-one name="user" class="User" column="user_id" cascade="save-update" unique="true" />
        </class>
    
    </hibernate-mapping>

      用户id作为主键:

    <?xml version="1.0" encoding="utf-8" ?>
    <!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.juaner.hibernate.idcard">
        <class name="IDCard" table="t_idcard" >
            <id name="userId">
                <!--主键生成方式是foreign,即把别的表的主键作为当前表的主键
                    property指定引用的对象,根据对象可以找到对象的类及映射文件,
                    从而找到表的主键
                    -->
                <generator class="foreign">
                    <param name="property">user</param>
                </generator>
            </id>
            <property name="cardNum"/>
            <property name="place"/>
            <!--基于主键的映射
                constraint=true指定在主键上添加外键约束
                -->
            <one-to-one name="user"  class="User" constrained="true" cascade="save-update"  />
        </class>
    
    </hibernate-mapping>
  • 相关阅读:
    1.4redis小结--队列在抢购活动的实现思路
    1.3redis小结--配置php reids拓展
    redis小结 1-2
    redis小结 1-1
    pandas学习小记
    Python简单算法的实现
    python编码
    ThinkPHP中的__initialize()和类的构造函数__construct()
    js正则常用方法
    总结了下PHPExcel官方读取的几个例子
  • 原文地址:https://www.cnblogs.com/juaner767/p/5567514.html
Copyright © 2011-2022 走看看