hibernate表与表之间一对多关系配置初体验

之前在学生课程小hibernate struts2整合小项目中配置了学生和其紧急联系人的 一对一 关系,现在是配置课程和任课教师的 一对多 关系。这里分析,一个老师可以上多门课程,而一门课程只能有一个任课教师(不排除多个老师上一门课的现实情况,这里为了说明一对多关系,姑且先不考虑)。


数据库中的两个表  :其中tid是多对一关系中的在course表中添加的外键,

课程
course(id,name,type,hours,tid)

教师
teacher(id,name,sex,phone)


配置过程:

一、首先建立两个实体类 Course  Teacher  在这两个类中设置(这里默认定义了字段(除外键)和 其set和get方法 )

(1)实体注解配置:@Entity   对应着导入的包为   javax.persistence.Entity;

(2)id和生成值注解配置 @Id @GeneratedValue  

 对应导入的包为:   javax.persistence.GeneratedValue;   javax.persistence.Id;


二、在Course 实体类中,定义属性 private Teacher teacher; 和其setter getter; 在Teacher实体类中要注意这里不能定义 private Course course  因为是多对一关系,所以应该是定义一个 课程集合 的属性 。这里选择用的是Set<泛型>  来定义course的集合属性。当然也有setter和getter。

private Set<Course> courses;   


三、在实体类中注解两者之间的一对多关系:

关系中“多”的实体类中 应该注解@ManyToOne    注解加入的外键字段 @JoinColumn(name="tid")

在“一”的实体类中   应该注解@OneToMany(mappedBy="teacher")  


四、在hibernate.cfg.xml文件中配置刚才的注解


<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<hibernate-configuration>

    <session-factory>
    <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
	<property name="connection.url">jdbc:mysql://localhost:3306/curricula</property> 		
	<property name="connection.username">jack</property> 
	<property name="connection.password">12345678</property>  
	<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> 		
	<property name="show_sql">true</property>
    <property name="hbm2ddl.auto">update</property>
    <mapping class="model.Student" />
    <mapping class="model.Contact" />
    <mapping class="model.Room"/>
    <mapping class="model.Teacher"/>
    <mapping class="model.Course"/>
    </session-factory>

</hibernate-configuration>


五、在Junit单元测试中测试:


package Test;

import org.hibernate.Session;
import org.junit.Test;

import common.HibernateUtil;
import model.Course;
import model.Room;
import model.Teacher;
//测试教室-课程  教师-课程 映射关系
public class CheckMapping {
	@Test
	public void mytest()
	{
		Course course=new Course();
		course.setName("java语言程序设计");
		course.setType("选修课");
		course.setHours(90);
		
		Teacher teacher=new Teacher();
		teacher.setName("张三丰");
		teacher.setSex("男");
		teacher.setPhone("18652476652");
		
		Room room=new Room();
		room.setName("c202");
		room.setAddress("教四楼");
		
		course.setTeacher(teacher);
		course.setRoom(room);
		
		Session session=HibernateUtil.openSession();
		session.beginTransaction();
		session.save(room);
		session.save(teacher);
		session.save(course);
		session.getTransaction().commit();
		session.close();
	}
}

在数据库中外键字段生成,并且数据也存放在表中生成记录。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值