hibernate map简单实现一对多关系映射

首先引题,现在有学生(1)成绩(多)两张表,要求使用hibernate关系映射(xml方式)建立它们之间的一对多关系。并且使用map更新学生的成绩
首先建立实体类
Student.java

package entities;

import java.util.Date;
import java.util.HashMap;
import java.util.Map;
/*
变量依次为:学号、姓名、性别、出生日期、分数(纯映射用 students表中无此字段)
*/
public class Student {
    private Long studentNum;
    private String name;
    private String sex;
    private Date date;

    private Map mark;

    public Student() {
        mark = new HashMap<>();
    }

    public Long getStudentNum() {
        return studentNum;
    }

    public void setStudentNum(Long studentNum) {
        this.studentNum = studentNum;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public Date getDate() {
        return date;
    }

    public void setDate(Date date) {
        this.date = date;
    }


    public Map getMark() {
        return mark;
    }

    public void setMark(Map mark) {
        this.mark = mark;
    }
}

接着建立 Student的关系映射文件
Student.hbm.xml



    
    
        
            
            
        
        
        
        
        
        
            
            
            
        
    

这里解释下 class标签内,name为Student中的属性名,column为students表中字段名 type表示字段值的类型
比较难理解的是这里的 map标签
map标签在这里是为了建立两个表的关系
name指定在 Student 中的 map变量名 table指定建立关系的表名
标签 column属性指定了marks表的外键stuentNum
或者 都是为了map中的key值在marks表中的映射
是为了 map value值的映射

接着是成绩实体类
值得注意的是一对多 为多的一方在实体类中包含为一的实体类
这里是 分数中含有一个学生类
Mark.java

package entities;

public class Mark {
    private  Long studentNum;
    private String m_id;
    private String mark;
    private Student student;

    public Long getStudentNum() {
        return studentNum;
    }

    public void setStudentNum(Long studentNum) {
        this.studentNum = studentNum;
    }

    public String getM_id() {
        return m_id;
    }

    public void setM_id(String m_id) {
        this.m_id = m_id;
    }

    public String getMark() {
        return mark;
    }

    public void setMark(String mark) {
        this.mark = mark;
    }

    public Student getStudent() {
        return student;
    }

    public void setStudent(Student student) {
        this.student = student;
    }
}

最后是分数的对应关系映射文件
Mark.hbm.xml



    
    

        
            
        

        
        
        
    

最后放上测试代码

import entities.Student;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class Test {
    public static void main(String args[]){
        Configuration cfg = new Configuration();
        SessionFactory sf = cfg.configure().buildSessionFactory();
        Student s = new Student();
        s.setStudentNum(new Long(12312));
        s.getMark().put("aa","a22");
        s.getMark().put("123","11");
        Session session = sf.getCurrentSession();
        session.beginTransaction();
        session.save(s);
        session.getTransaction().commit();
    }
}

你可能感兴趣的:(hibernate map简单实现一对多关系映射)