zoukankan      html  css  js  c++  java
  • hibernate入门知识-03-对象关系映射

    1.数据库表有三种关系

      a.一对一

      b.多对一/一对多

      c.多对多/单向或双向关联

    2.在hibernate中把表关系的概念引用到java对象中来,以下是多对一的关系

      

      班级类是一,学生类是多

      那么在配置映射文件Student.hbm.xml文件中的配置为

      

        <hibernate-mapping>
          <!-- student类和数据库中t_user表进行对应 -->
          <class name="onetomany.Students" table="t_students">


          <!-- 主键配置 student.id属性和t_user.t_id字段对应 -->
          <id name="studentId" column="t_id">


          <!-- 主键生成器:以何种方式生成主键 -->
          <generator class="native"></generator>      </id>


          <!-- 非主键属性 -->
          <property name="studentName" column="t_name"></property>
          <many-to-one name="clazz" column="t_clazz_id" cascade="save-update"></many-to-one>
          </class>

          

          <!-- 多对一配置  以   student类的属性clazz,所对应的Clazz的类,所对应的数据库表的属性t_clazz_id为外键--有点绕,多思考下就明白了>  

          //cascade="save-update"配置是该类与Clazz类的级联关系,设置为save-update是指只在添加和修改时级联,删除时不级联

        </hibernate-mapping>

      3.一对一关系

        a.表结构,主键关联:单向,一张表的主键作为外键,参考另一张表的主键)

        

        其中,person表的id作为外键,参考的是IdCard表的主键...因此Person任何一行都参考了IdCard,并且主键本身唯一,确保了Person和IdCaed一对一的关系,

        b.在person.hbm.xml映射配置如下      

          <hibernate-mapping>
            <class name="one2one.primarykey.single.Person" table="t_person">
            

            <id name="id" column="t_id">
              <!-- Person的主键依赖于自己的成员变量idCard所表示的类型IdCard,,,所映射的表t_idcard的主键t_id -->
              <generator class="foreign">
                <param name="property">idCard</param>
              </generator>
            </id>

            //表示在生成数据表时会加上主外键约束
            <one-to-one name="idCard" constrained="true"></one-to-one>
            </class>
          </hibernate-mapping>

        c.唯一外键关联,也就是在person中设置外键+设置唯一性约束(非主键);

            其中IdCard是多的一方,该类有person集合;

          

        public class IdCard {
        private int id;
        private long number;
        private Person person;
        public Person getPerson() {
        return person;
        }
        public void setPerson(Person person) {
        this.person = person;
        }
        public int getId() {
        return id;
        }
        public void setId(int id) {
        this.id = id;
        }
        public long getNumber() {
        return number;
        }
        public void setNumber(long number) {
        this.number = number;
        }

          映射文件配置

        

        <hibernate-mapping>
        <class name="one2one.primarykey.single.IdCard" table="t_idcard">
        <id name="id" column="t_id">
        <generator class="native"></generator>
        </id>
        <property name="number" column="t_number"></property>
        <one-to-one name="person"></one-to-one>
        </class>
        </hibernate-mapping>

      

  • 相关阅读:
    JVM调优总结(四)-垃圾回收面临的问题
    JVM调优总结(三)-基本垃圾回收算法
    JVM调优总结(二)-一些概念
    Java8 Lambda表达式教程
    Java8 Lambda表达式教程
    Java8 Lambda表达式教程
    JVM调优总结(一)-- 一些概念
    Hibernate 3中如何获得库表所有字段的名称
    easyUI-datagrid带有工具栏和分页器的数据网格
    easyui-tabs
  • 原文地址:https://www.cnblogs.com/ou134568/p/6860701.html
Copyright © 2011-2022 走看看