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>
  • 相关阅读:
    技术服务支持
    如何将Java Web项目部署到服务器上
    移动端前端开发——微信左上角返回按钮(JQMobile)
    Mac下phpstorm 浏览器出现 502 bad gateway 解决办法
    mysql sql语句大全
    复制自己的ssh-key
    PhpStorm环境搭建
    max下搭建XAMPP
    Cocopods第三方库管理工具创建Swift项目&OC项目就
    Swift-闭包
  • 原文地址:https://www.cnblogs.com/juaner767/p/5567514.html
Copyright © 2011-2022 走看看