Hibernate单向多对一关联

多对一的关系和关系数据库中的外键参考关系最匹配,即在己方的表中的一个外键参照另一个表的主键。 例如:多个学生对应一个班级。 通过在多方持有一方的引用实现,需要在”多”的一端使用配置。修改Student类,如下:package com.imooc.entity;import java.io.Serializable;public class Student impleme
摘要由CSDN通过智能技术生成

多对一的关系和关系数据库中的外键参考关系最匹配,即在己方的表中的一个外键参照另一个表的主键。
例如:多个学生对应一个班级。
通过在多方持有一方的引用实现,需要在”多”的一端使用<many-to-one>配置。

修改Student类,如下:

package com.imooc.entity;

import java.io.Serializable;

public class Student implements Serializable {
    private int sid;
    private String sname;
    private String sex;
    //在多方定义一个一方的引用
    private Grade grade;

    public Grade getGrade() {
        return grade;
    }
    public void setGrade(Grade grade) {
        this.grade = grade;
    }
    public int getSid() {
        return sid;
    }
    public void setSid(int sid) {
        this.sid = sid;
    }
    public String getSname() {
        return sname;
    }
    public void setSname(String sname) {
        this.sname = sname;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }

    public Student() {

    }

    public Student(int sid, String sname, String sex) {
        this.sid = sid;
        this.sname = sname;
        this.sex = sex;
    }
    public Student(String sname, String sex) {
        this.sname = sname;
        this.sex = sex;
    }




}

修改其映射文件为:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 2016-4-12 21:51:49 by Hibernate Tools 3.5.0.Final -->
<hibernate-mapping>
    <class name="com.imooc.entity.Student" table="student">
        <id name="sid" type="int">
            <column name="sid" />
            <generator class="increment" />
        </id>
        <property name="sname" type="java.lang.String">
            <column name="sname" />
        </property>
        <property name="sex" type="java.lang.String">
            <column name="sex" />
        </property>
        <!-- 配置多对一关联关系 -->
        <many-to-one name="grade" class="com.imooc.entity.Grade" column="gid">
        </many-to-one>
    </class>
</hibernate-mapping>

Grade类为:

package com.imooc.entity;

import java.io.Serializable;

public class Grade implements Serializable {
    private int gid;
    private String gname;
    private String gdesc;

    public int getGid() {
        return gid;
    }

    public void setGid(int gid) {
        this.gid = gid;
    }

    public String getGname() {
        return gname;
    }

    public void setGname(String gname) {
        this.gname = gname;
    }

    public String getGdesc() {
        return gdesc;
    }

    public void setGdesc(String gdesc) {
        this.gdesc = gdesc;
    }


    //构造方法
    public Grade() {
        super();
    }

    public Grade(int gid, String gname, String gdesc) {
        this.gid = gid;
        this.gname = gname;
        this.gdesc = gdesc;
    }

    public Grade(String gname, String gdesc) {
        this.gname = gname;
        this.gdesc = gdesc;
    }




}

其关系映射文件为:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 2016-4-12 21:51:49 by Hibernate Tools 3.5.0.Final -->
<hibernate-mapping>
    <class name="com.imooc.entity.Grade" table="grade">
        <id name="gid" type="int">
            <column name="gid" />
            <generator class="increment" />
        </id>
        <property name="gname" type="java.lang.String">
            <column name="gname"  length="20" not-null="true"/>
        </property>
        <property name="gdesc" type="java.lang.String">
            <column name="gdesc" />
        </property>
    </class>
</hibernate-mapping>

测试Test。
保存班级学生信息,方法如下:

    //将学生添加到班级
    public static void add()
    {
        Grade g = new Grade("一年级一班", "xx小学一年级一班");
        Student s1 = new Student("张三", "男");
        Student s2 = new Student("小美", "女");

        //设置关系
        s1.setGrade(g);
        s2.setGrade(g);

        Session session = HibernateUtil.getSession();
        Transaction transaction = session.beginTransaction();
        session.save(g);
        session.save(s1);
        session.save(s2);
        transaction.commit();
        HibernateUtil.closeSession(session);
    }

在控制台会输出如下的信息:

Hibernate: select max(gid) from grade
Hibernate: select max(sid) from student
Hibernate: insert into grade (gname, gdesc, gid) values (?, ?, ?)
Hibernate: insert into student (sname, sex, gid, sid) values (?, ?, ?, ?)
Hibernate: insert into student (sname, sex, gid, sid) values (?, ?, ?, ?)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值