之前在学生课程小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();
}
}
在数据库中外键字段生成,并且数据也存放在表中生成记录。