美文网首页程序员
Hibernate映射(一对多)

Hibernate映射(一对多)

作者: 小炉炉 | 来源:发表于2017-09-12 23:42 被阅读51次

    Hibernate映射关系其实有很多种,包含一对一,一对多,多对一,多对多。其中,还有包含单向关联,多想关联。但是鉴于时空关系,本文只谈一下单向一对多关系的映射。而多对一进行反向思维就是一对多。

    如何确定一个映射关系:

    这个取决于需求,比如,你的师生管理项目中,客户已经明确规定,在这个项目中,老师可以教多个学生,学生也可以有多个老师,这很明显是m:n就是多对多的关系。如果说做部门与员工这样的表,那么一个部门可以有多个员工,但是,每个员工只能在一个部门工作,这就是一个1:M一对多的关系。到底要用哪种关系,取决于你对客户需求的理解 。

    正文

    这里我所写的是一个班级对应着多个学生。

    一对多的映射关系:

    类的设定:在多对一的关系中,多的哪一方属于归属方,而少的那一方属于被归属方。(归属方归属于被归属方)在设定类中的内容的时候,一的那一方除了有自己特有的属性意外,还应该将多的那一方的Set集合写进一的那一方的类中。而多的那一方,应该将一的那一方的对象写在自己的类的属性中,表示自己归属于这个类。
    如:

    Classes.java
    package com.zhiyou.hibernate.entity;
    import java.util.HashSet;
    import java.util.Set;
    public class Classes {
    /* 这里我只写了属性,并没有写set和get方法。IDE工具可以自动生成*/
        private int id;
        private String name;
        // 一对多通常使用Set来映射,Set是不可重复内容。
        private Set<Student> students = new HashSet<Student>();
    }
    
    Student.java
    /* 这里我只写了属性,并没有写set和get方法。IDE工具可以自动生成*/
        private int id;
        private String name;
        private Classes classes;
    

    处理完class类,就需要配置与Class类对应的hub的xml文件。
    在Hibernate中所有的实体类都对应着一个hub配置文件。
    而hub配置文件同时又关联着数据库表。

    classes.hub.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.zhiyou.hibernate.entity">
    
        <class name="Classes" table="t_classess">
            <id name="id" column="id">
                <!-- 这个表示主键的生成方式
                    http://blog.csdn.net/zxygww/article/details/45194445
                 -->
                <generator class="native"/>
            </id>
            <property name="name" column="name"></property>
            <!-- 设置Set集合属性,用于关联多个学生 -->  
            <set name="students" >
            <!-- 在t_student表中创建外键classid,与本表的id对应 -->  
                <key column="classesid" />
                <!-- 
                <one-to-many>
                <many-to-one>
                的选择取决于当前类与指向类的关系,如果当前为一对多中的一,那么应当选择<one-to-many>
                如果当前是一对多种的多那么当选择<many-to-one>,当然如果是单向关联,那么就无需写此标签
                http://blog.csdn.net/xiaoxian8023/article/details/15339657
                 -->
                <one-to-many class="Student"/>
            </set>
        </class>
    </hibernate-mapping>
    
    student.hub.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>
        <class name="com.zhiyou.hibernate.entity.Student" table="t_student">
            <id name="id" column="id">
                <generator class="native"/>
            </id>
            <property name="name" column="name"/>
        </class>
    </hibernate-mapping>
    
    备注:
    对classes.hub.xml的补充说明
    所有的以上步骤都必须在hibernate.cfg.xml,spring-hibernat.xml 与Spring和SpringMVC整合之后才可以在maven项目中运行

    相关文章

      网友评论

        本文标题:Hibernate映射(一对多)

        本文链接:https://www.haomeiwen.com/subject/dvwhsxtx.html