码迷,mamicode.com
首页 > Web开发 > 详细

hibernate表关系

时间:2018-10-10 16:11:00      阅读:204      评论:0      收藏:0      [点我收藏+]

标签:一个   hashset   native   http   int   none   标签   public   stun   

1.一对一

  用户表可以查分成两个表,一个userInfo、一个userLogin表

 

  实现方式:

(1)使用外键:外键+唯一性约束+非空约束

(2)公用主键:公用主键,从表的主键同时也是外键,来源于主表的主键。

 

2. 一对多

  使用外键,实现一对多关系,外键可以为null

  主从关系:一:主表,多:从表  ,从表的外键必须是主表的主键或者null。

 

实现方法:Student     Clazz    

step1:在一个一方创建对象引用集合  Set<>

private Set<Student> students = new HashSet<>(0);

step2:在多的一方创建对象引用  

private Clazz clazz;

step3:在多方 实体中建立多对一关系-<many-to-one>【由多的一方维护关系】。

  在一方配置<set>标签【可选】

技术分享图片
public class Student implements Serializable {
    private Integer id;
    private String stuName;
    private Integer age;
    private Clazz clazz;
    //set,get省略
}
Student.java

 

 

技术分享图片
public class Clazz implements Serializable {
    private Integer id;
    private String className;

    //实例化,可以防止空指针异常
    private Set<Student> students = new HashSet<>(0); //长度设为0
}
Clazz.java

 

 

技术分享图片
<hibernate-mapping package="cn.getword.domain">
    <class name="Student" table="tb_student">
        <id name="id" column="id" type="int">
            <generator class="native"></generator>
        </id>
        <property name="stuName" column="username" />
        <property name="age" column="age" />
        <!-- name:用于指定引用对象在类中属性名称
             class:一方的类的路径
             column:外键名称
         -->
        <many-to-one name="clazz" class="Clazz" column="clazz_id" />
    </class>
</hibernate-mapping>
Student.hbm.xml

 

 

技术分享图片
<hibernate-mapping package="cn.getword.domain">
    <class name="Clazz" table="tb_clazz">
        <id name="id" column="id" type="int">
            <generator class="native"></generator>
        </id>
        <property name="className" column="class_name" />
        <!-- name:引用集合的名称
             table:多方表明
         -->
        <set name="students" table="tb_student">
            <!-- key:多方表的外键名称 -->
            <key column="clazz_id"></key>
            <one-to-many class="Student"></one-to-many>
        </set>
    </class>
</hibernate-mapping>
Clazz.hbm.xml

 

 

技术分享图片

 

 

 

3. 多对多

  使用中间表实现多对多关系。中间表只有两个字段,即两个表的主键,中间表的主键就是两个外键的联合主键。

 

 

 

 

end

hibernate表关系

标签:一个   hashset   native   http   int   none   标签   public   stun   

原文地址:https://www.cnblogs.com/zhuxiang1633/p/9766865.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!