zoukankan      html  css  js  c++  java
  • hibernate关系映射

    对象之间的关系

    1  这里的关系映射指的是对象之间的关系,并不是指数据库的关系,本章解决的问题是当对象之间处于

    下列关系之一时,数据库表该如何映射,编程上该如何对待(红色为重点)

    2 简化问题:

      a) 怎么写 Annotation

      b)增删改査CRUD怎么写

    3 —对一

      a)单向(主键、外键)

      b)双向(主键、外键)

      c)中间表

    4—对多

      a)一张主表,多张子表

    5 组件映射

      a)@Embeddable

      b)@ Embedded

    一对一关联

    1 一对一单向外键关联

      a)项目名称:hibernate_0600_one2one_uni_fk

      b)Annotation: 在被约束表字段的get方法上加@0ne20ne @JoinColumn

           @OneToOne

            @JoinColumn(name="wifeid") //指定生成的数据库字段名

            public Wife getWife() {

                   return wife;

            }

      c)xml: 在被约束表的xml配置文件中加<many-to-one unique

          <class name="com.bjsxt.pojo.StuIdCard">

             <id name="id">

                 <generator class="native"></generator>

             </id>

             <property name="num"/>

             <many-to-one name="student" column="studentId" unique="true">

        </many-to-one>

      </class>

    unique="true"是保证生成的字段唯一,这样<many-to-one 也达到了一对一的效果

    2 一对一双向外键关联

      a)项目名称:hibernate_0700_one2one_bi_fk^

      b)Annotation: @0ne20ne(mappedBy=”…”)

        规律:凡是双向关联,必设mappedBy

        在Wife类中 写Husband对象属性 并添加注解@OneToOne(mappedBy="wife") mappedBy作用是指定这个一对一关联是被Husband类的 wife属性(准确说是getWife方法)做的映射

    @OneToOne(mappedBy="wife")

               public Husband getHusband() {

                  return husband;

           }

           在类中写Wife对象属性

            @OneToOne

            @JoinColumn(name="wifeid") //指定生成的数据库字段名

            public Wife getWife() {

                   return wife;

            }

           此注释将由Husband表中生成wifeid字段作为fk外键,wife表中不生成额外的Husbandid字段

      c)xml: many-to-one unique <one-to-one property-ref

    在Student类中写StuIdCard属性, StuIdCard类中写Student属性

    StuIdCard.hbm.xml文件中加

    <many-to-one name="student" column="studentId" unique="true"></many-to-one>

    Student.hbm.xml文件中加

    <one-to-one name="stuIdCard" property-ref="student"></one-to-one>

    其中, property-ref 相当于mappedBy

    此方式生成的StuIdCard表中包含studentid字段作为fk外键, Student表中不生成额外的字段

    特别说明: 一对一单向外键关联与一对一双向外键关联在数据库的表的格式是一样的,区别在于

    java程序中. 双向外键关联可通过Hibernate在两个类间互相调用彼此,而单向外键关联只能单方向调用.

    3 一对一单向主键关联

      a) 项目名称:hibernate_0800_one2one_uni_pk

      b)@primaryKeyJoinColumn

      c)xml: <one-to-one id 使用 foreign class

    4 一对一双向主键关联(不重要)

      a)项目名称:hibernate_0900_one2one_bi_pk

      b)@primaryKeyJoinColumn

      c)xml: <one-to-one id 使用foreign class和<one-to-one property-ref

    5联合主键

      a)项目名称:hibernate_1000_one2one_uni_fk_composite

      b)@JoinColumns

    Wife类中建立联合主键,建立方式参考 ID生成策略中的联合主键部分

    Husband类中写Wife对象属性,并在其get方法上写@OneToOne即可完成一对一外键映射

    若想要指定生成的外键名 则需使用@JoinColumns注解,如下:

           @OneToOne

             @JoinColumns( { @JoinColumn(name = "wifeid", referencedColumnName = "id"),

                                @JoinColumn(name = "wifename", referencedColumnName = "name") })

             /*@JoinColumns用于在一对一外键关联存在联合主键情况时指定生成的外键字段名称

             @JoinColumns的参数为@JoinColumn数组 @JoinColumn内除需指定name属性外还需指定

             referencedColumnName属性值 作用是可指定生成的字段名所对应的目标表字段名*/

             public Wife getWife() {……}

  • 相关阅读:
    1.8 接口中的静态方法
    1.7 默认方法
    1.6 变量作用域
    汉字转拼音
    1.5 构造器引用
    1.4 方法引用
    循环中冲不掉外部定义的变量
    getBoundingClientRect
    Angular1.0 在Directive中调用Controller的方法
    horizontalDragMaxWidth:0;就没有水平滚动条了
  • 原文地址:https://www.cnblogs.com/yumofei/p/5628157.html
Copyright © 2011-2022 走看看