【7.0】单向多对一的关联映射
1.学生表student 和年级表 grade
2.类Student 和Grade类
public class Student {
private int id;
private String name;
private int age;
private Grade grade;
//get…set
}
public class Grade {
private int id;
private String name;
//get…set
}
3.映射文件
Grade.hbm.xml:
<hibernate-mapping package="cn.siggy.pojo"> <class name="Grade"> <id name="id"> <generator class="native"></generator> </id> <property name="name"/> </class> </hibernate-mapping>
Student.hbm.xml:
<hibernate-mapping package="cn.siggy.pojo"> <class name="Student"> <id name="id"> <generator class="native"></generator> </id> <property name="name"/> <property name="age"/> <!-- 多对一 name 表示属性名 class 指明 属性对应的类 column指 数据库表中的列名 --> <many-to-one name="grade" class="Grade" column="grade_id" foreign-key="fk_grade" not-null="true"/> </class> </hibernate-mapping>
4.测试代码
package cn.siggy.test;
import java.sql.SQLException;
import javax.sql.rowset.serial.SerialException;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.tool.hbm2ddl.SchemaExport;
import org.junit.Test;
import cn.siggy.pojo.Grade;
import cn.siggy.pojo.Student;
import cn.siggy.util.HibernateUtil;
public class HibernateTest {
@Test
public void testCreateDB(){
Configuration cfg = new Configuration().configure();
SchemaExport se = new SchemaExport(cfg);
//第一个参数 是否生成ddl脚本 第二个参数 是否执行到数据库中
se.create(true, true);
}
@Test
public void testSave() throws HibernateException, SerialException, SQLException{
Session session = null;
Transaction tx = null;
try{
session = HibernateUtil.getSession();
tx = session.beginTransaction();
Grade grade = new Grade();
grade.setName("基础");
session.save(grade);
Student stu = new Student();
stu.setName("张三疯");
stu.setAge(22);
stu.setGrade(grade);
session.save(stu);
tx.commit();
}catch (HibernateException e) {
if(tx!=null)
tx.rollback();
e.printStackTrace();
throw e;
}finally{
HibernateUtil.closeSession();
}
}
@Test
public void testGet(){
Session session = null;
Transaction tx = null;
try{
session = HibernateUtil.getSession();
tx = session.beginTransaction();
//取数据
Student stu = (Student)session.get(Student.class, 1);
System.out.println("student——name:"+stu.getName()+"--grade-name:"+stu.getGrade().getName());
tx.commit();
}catch (HibernateException e) {
if(tx!=null)
tx.rollback();
e.printStackTrace();
throw e;
}finally{
HibernateUtil.closeSession();
}
}
}
5.测试结果
控制台信息:
数据库表信息:




浙公网安备 33010602011771号