hibernate系列七:多对一关联配置及案例

这里以大学里的学生表和系表为例介绍,学生和系之间是多对一的关系。我们称学生是多方或外键方,称系为一方或主键方。

=================sql脚本=========================

CREATE TABLE department
(
    deptId SMALLINT PRIMARY KEY,
    departName VARCHAR(20) NOT NULL,
    address VARCHAR(20)
)
;

CREATE TABLE student
(
    stuId INT PRIMARY KEY AUTO_INCREMENT,
    stuName VARCHAR(20) NOT NULL,
    gender VARCHAR(2),
    age SMALLINT,
    address VARCHAR(200) DEFAULT '学生宿舍',
    deptIdd SMALLINT,
    FOREIGN KEY(deptIdd) REFERENCES department(deptId)
)AUTO_INCREMENT=100
;
INSERT INTO department VALUES (10,'计算机系','计算机楼302');
INSERT INTO department VALUES (11,'艺术系','艺术楼211');
INSERT INTO department VALUES (12,'经管系','商学院911');
INSERT INTO department VALUES (13,'工程系','工程楼301');
INSERT INTO department VALUES (14,'土木系','建筑楼355');
--
INSERT INTO Student(stuName,gender,age,address,deptIdd) VALUES ('王燕','女',18,DEFAULT,10);
INSERT INTO Student(stuName,gender,age,address,deptIdd) VALUES ('张栋','男',21,DEFAULT,10);
INSERT INTO Student(stuName,gender,age,address,deptIdd) VALUES ('李波','男',21,DEFAULT,11);
INSERT INTO Student(stuName,gender,age,address,deptIdd) VALUES ('陈建','男',19,DEFAULT,11);
INSERT INTO Student(stuName,gender,age,address,deptIdd) VALUES ('王江洪','男',25,DEFAULT,12);
INSERT INTO Student(stuName,gender,age,address,deptIdd) VALUES ('潘将','男',24,DEFAULT,13);
INSERT INTO Student(stuName,gender,age,address,deptIdd) VALUES ('张斌','男',22,DEFAULT,14);
INSERT INTO Student(stuName,gender,age,address,deptIdd) VALUES ('张斌','女',20,DEFAULT,10);
--
INSERT INTO Student(stuName,gender,age,address,deptIdd) VALUES ('刘大海','男',28,DEFAULT,10);
INSERT INTO Student(stuName,gender,age,address,deptIdd) VALUES ('刘德华','男',31,DEFAULT,10);
INSERT INTO Student(stuName,gender,age,address,deptIdd) VALUES ('周润发','男',41,DEFAULT,11);
INSERT INTO Student(stuName,gender,age,address,deptIdd) VALUES ('张学友','男',37,DEFAULT,11);
INSERT INTO Student(stuName,gender,age,address,deptIdd) VALUES ('周星驰','男',42,DEFAULT,12);
INSERT INTO Student(stuName,gender,age,address,deptIdd) VALUES ('刘亦菲','女',24,DEFAULT,13);
INSERT INTO Student(stuName,gender,age,address,deptIdd) VALUES ('胡歌','男',32,DEFAULT,14);
INSERT INTO Student(stuName,gender,age,address,deptIdd) VALUES ('范冰冰','女',20,DEFAULT,10);
INSERT INTO Student(stuName,gender,age,address,deptIdd) VALUES ('杨幂','女',26,DEFAULT,14);
INSERT INTO Student(stuName,gender,age,address,deptIdd) VALUES ('刘涛','女',27,DEFAULT,13);
INSERT INTO Student(stuName,gender,age,address,deptIdd) VALUES ('周迅','女',21,DEFAULT,13);
INSERT INTO Student(stuName,gender,age,address,deptIdd) VALUES ('古力娜扎','女',19,DEFAULT,10);
INSERT INTO Student(stuName,gender,age,address,deptIdd) VALUES ('黑山老妖','妖',99,DEFAULT,12);
=========================实体类StudentEntity.java==========================

package com.obtk.entitys;

public class StudentEntity implements java.io.Serializable {

	private static final long serialVersionUID = -2673758962758719899L;
	private Integer stuId;
	private String stuName;
	private String gender;
	private Integer age;
	private String address;
	private DeptEntity dept;   //是一个关联属性,表示多个学生对应一个系

	public StudentEntity() {
	}

	public StudentEntity( String stuName, String gender,
			Integer age, String address) {
		this.stuName = stuName;
		this.gender = gender;
		this.age = age;
		this.address = address;
	}


	public Integer getStuId() {
		return this.stuId;
	}

	public void setStuId(Integer stuId) {
		this.stuId = stuId;
	}


	public String getStuName() {
		return this.stuName;
	}

	public void setStuName(String stuName) {
		this.stuName = stuName;
	}

	public String getGender() {
		return this.gender;
	}

	public void setGender(String gender) {
		this.gender = gender;
	}

	public Integer getAge() {
		return this.age;
	}

	public void setAge(Integer age) {
		this.age = age;
	}

	public String getAddress() {
		return this.address;
	}

	public void setAddress(String address) {
		this.address = address;
	}
	public void setDept(DeptEntity dept) {
		this.dept = dept;
	}
	public DeptEntity getDept() {
		return dept;
	}
}
=====================实体类DeptEntity================================

package com.obtk.entitys;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

/**
 * Department entity. @author MyEclipse Persistence Tools
 */

public class DeptEntity implements java.io.Serializable {

	private static final long serialVersionUID = -8998119551638998375L;
	private Integer deptId;
	private String departName;
	private String address;
	
	public DeptEntity() {
	}


	public DeptEntity(Integer deptId, String departName, String address) {
		this.deptId = deptId;
		this.departName = departName;
		this.address = address;
	}


	public Integer getDeptId() {
		return this.deptId;
	}

	public void setDeptId(Integer deptId) {
		this.deptId = deptId;
	}

	public String getDepartName() {
		return this.departName;
	}

	public void setDepartName(String departName) {
		this.departName = departName;
	}

	public String getAddress() {
		return this.address;
	}

	public void setAddress(String address) {
		this.address = address;
	}
}
=================映射文件Student.hbm.xml============================

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- 
    Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping package="com.obtk.entitys">
    <class name="StudentEntity" table="student">
        <id name="stuId" type="java.lang.Integer">
            <column name="stuId" />
            <generator class="native"></generator>
        </id>
        <property name="stuName" type="java.lang.String">
            <column name="stuName" length="20" />
        </property>
        <property name="gender" type="java.lang.String">
            <column name="gender" length="2" />
        </property>
        <property name="age" type="integer">
            <column name="age" />
        </property>
        <property name="address" type="java.lang.String">
            <column name="address" length="200" />
        </property>
        <!-- 注意,column配置是外键 -->
        <many-to-one name="dept" class="DeptEntity"
        	column="deptIdd"></many-to-one>
    </class>
</hibernate-mapping>
接下来是相关案例

案例一.  数据添加

package com.obtk.test;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;

import com.obtk.entitys.DeptEntity;
import com.obtk.entitys.StudentEntity;
import com.obtk.utils.HiberUtil;

public class AddTest1 {
	public static void main(String[] args) {
		Session session=null;
		Transaction tx=null;
		try {
			session=HiberUtil.getSession();
			tx=session.beginTransaction();
			DeptEntity dept=new DeptEntity(15, "金融系", "金融楼320");
			session.save(dept);  //由瞬时态转换为持久态
			StudentEntity stu1=new StudentEntity("aa", "男", 21, "obtk学生宿舍");
			StudentEntity stu2=new StudentEntity("cc", "女", 20, "obtk学生宿舍");
			stu1.setDept(dept);
			stu2.setDept(dept);
			session.save(stu1);
			session.save(stu2);
			tx.commit();
		} catch (HibernateException e) {
			tx.rollback();
			e.printStackTrace();
		}finally{
			HiberUtil.closeSession();
		}
	}
}
案例二.  查询

package com.obtk.test;

import org.hibernate.HibernateException;
import org.hibernate.Session;

import com.obtk.entitys.StudentEntity;
import com.obtk.utils.HiberUtil;

public class JoinTest1 {
	public static void main(String[] args) {
		Session session=null;
		try {
			session=HiberUtil.getSession();
			StudentEntity stu=(StudentEntity)session.load(StudentEntity.class, 113);
			System.out.println(stu.getStuName()+"\t"+stu.getGender()
					+"\t"+stu.getDept().getDepartName());
		} catch (HibernateException e) {
			e.printStackTrace();
		}finally{
			HiberUtil.closeSession();
		}
	}
}
















  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

御前两把刀刀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值