程序员

Hibernate映射(一对多)

2017-09-12  本文已影响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项目中运行
上一篇 下一篇

猜你喜欢

热点阅读